定时任务基础
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定时任务基础相关的知识,希望对你有一定的参考价值。
定时任务基础
1.1闹钟与定时任务Crond
1.1.1crond是什么
crond是linux系统中用来定期执行命令/脚本或指定程序任务的一种服务或软件。
特殊需求:crond服务搞不定了,一般工作中书写shell脚本守护进程执行。
Crond相当于闹钟
1.1.2程序、进程、守护进程
进程(文件):放在磁盘里的,程序代码组成,但是没有在计算机内执行,当前没有执行。
进程:所谓进程就是计算机中正在执行/运行的进程,运行起来的程序。
守护进程:守护进程就是一直运行的程序。
1.2定时任务分类
at(atd):适合仅执行一次就结束的调度任务命令。(工作中从来都没有需求用这个)
crond(crontab 管理命令):这个命令可以周期性的执行任务工作
anacron:这个命令主要用于不是7*24小时开机的服务器准备的,anacron并不能指定具体时间执行任务工作,而是以天为周期或者在系统每次开机后执行的任务工作。
1.2.1开机自启动crond服务
chkconfig
1.3cron分类:用户定时任务与系统定时任务
1.3.1用户
crontab -l
/var/spool/cron/root 用户的定时任务
1.3.2系统的定时任务
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
/etc/cron.deny
/etc/crontab系统定时任务的配置文件之一
系统定时任务+logrotate命令 完成对日志的切割/日志轮询
1.4定时任务使用
1.4.1定时任务依赖的软件(服务)--是否能用
如何查看定时任务服务是否在运行
1.4.1.1 临时
/etc/init.d/crondstatus
[[email protected] ~]# /etc/init.d/crondstatus
crond (pid 1585) is running...
pid 进程的id号,给每个进程起一个独一无二的号码(身份证)
进程是否健在
ps-ef |grep crond |wc -l
[[email protected] ~]# ps -ef |grep crond
root 1585 1 0 Aug03 ? 00:00:01 crond
root 4679 4652 0 20:47 pts/1 00:00:00 egrep --color=auto --color=autocrond
看第一个ps -ef |grep crond |grep -vgrep
root 1585 1 0 Aug03 ? 00:00:01 crond
看一个ps -ef |grep crond |grep-v grep|wc -l
[[email protected] ~]# ps -ef |grep crond|grep -v grep|wc -l
1
查看crond是否开机自启动
[[email protected] ~]# chkconfig |grep crond
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
grep -c 统计行数,统计包含你想要的东西一共有几行
1.4.1.2 永久
1.4.2crontab命令使用--怎么用
指令选项说明含义
-l(小写字母L):查看crontab文件内容。显示当前用户的定时任务内容的配置。
-e:编辑crontab文件内容,提示:e可理解为edit的缩写。编辑或修改定时任务文件。
-i:删除crontab文件内容,删除前会提示确认。用的很少。
-r:删除crontab文件内容,清空所有,用的很少。
-u user :指定使用的用户执行任务。crontab默认编辑当前用户的定时任务配置。
特别强调:-i,-r参数在生产中很少用,没什么需求必须要用-e进去编辑即可。
[[email protected] oldboy]# crontab -l(查看定时任务)
no crontab for root (没有定时任务)
[[email protected] oldboy]# crontab -e(修改定时任务)
crontab==cat/var/spool/cron/root 查看
1.4.3为何使用crontab命令:
1.有语法检查功能
2.方便
1.4.4定时任务相关文件
/etc/cron.deny(拒绝):该文件中所列用户不允许使用crontab命令
/etc/cron.allow(准许,允许):该文件中所列用户允许使用crontab命令,优先于/etc/cron.deny
/var/spool/cron:所有用户crontab配置文件默认都存放在此目录,文件名以用户名命名
定时任务的配置文件,定时任务规则
文件名就是用户名(root)
/var/log/cron:定时任务的日志文件
1.4.5定时任务基本格式(分时日月周)
系统的定时任务
[[email protected] oldboy]# cat/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59) 分钟
# | .------------- hour (0 - 23) 小时
# | | .---------- day of month (1 -31) 日期
# | | | .------- month (1 - 12) OR jan,feb,mar,apr... 月份
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat周几
# | | | | | 0或7周日
# * * * * *user-name command to be executed
1.4.6用户定时任务实例:
01 **** cmd ##01分钟 每小时的第1分钟执行一次
数字表示什么时间-不要考虑重复-不要考虑多久执行一次
然后在想下一次执行的时间,多久执行一次
***** ##每分钟
02 04 *** cmd 凌晨04点02分,多久执行一次,每天的凌晨04点02分
22 14 ** 00 cmd 周日的下午14点22,每周的周日下午2点22分执行
42 04 01 ** cmd 1号凌晨4点42分,每个月的1号凌晨4点42分
1.4.7提示及小结
cmd为要执行的命令或脚本
每个列之间必须要有一个空格
第一个里程碑:把字面的翻译成实际的时间(这里不用考虑多久一次/重复)
第二个里程碑:思考多久重复一次或者思考下一次执行是什么时候
1.4.8crontab语法格式中特殊符号含义
* *号,表示任意时间都,实际就是“每”“任意”的意思
- 减号,从哪里开始到哪里结束,表示一个时间范围,区间段
, 逗号,并且,和,表示分隔时段的意思 17,18,19
/n n代表数字,即“每隔n单位时间”,例如:每10分钟执行一次
实例1-1:
30 3-5,17-19***/bin/sh/scripts/oldboy.sh
每天的3点到5点还有17点到19点的半点执行脚本
实例1-2
每分钟把自己的名字追加到/oldboy/oldboy.txt
第一个里程碑-如何显示自己的名字,并放入文件中
echo "oldboyedu" >>/oldboy/oldboy.txt
cat /oldboy/oldboy.txt
第二个里程碑-定时任务怎么写
crontab -e
#echo name heyong 20170102
echo "oldboyedu" >>/oldboy/oldboy.txt
crontab -e
第三个里程碑-测试,看看结果
tail -f /oldboy/oldboy.txt
date
第四个里程碑-遇到错误-排错
tail /var/log/cron
1.5定时任务书写过程
第一个里程碑:命令行测试-把你的名字显示到文件中
第二个里程碑:把命令放入到脚本中
第三个里程碑:测试下脚本是否可以用
第四个里程碑:写定时任务
第五个里程碑:检查结果
1.6总结:10字箴言
1.定时任务规则之前加注释
2.定时任务脚本中的程序命令及路径尽量使用绝对路径
3.使用脚本程序替代命令行定时问题
4定时任务的脚本权限问题
5.定时任务中命令或脚本结果(正确错误)定向到空或追加到文件中
6.避免不必要的程序及命令输出
7.打包压缩使用相对路径(切到目标目录上的一级打包目标)
8.时间变量问题用反斜线
9.系统与命令位置有关的环境变量问题
本文出自 “heyong” 博客,请务必保留此出处http://heyong.blog.51cto.com/13121269/1954021
以上是关于定时任务基础的主要内容,如果未能解决你的问题,请参考以下文章
SpringBootJava使用Scheduled注解实现定时任务功能—基础篇
Spring Boot 2.x基础教程:使用@Scheduled实现定时任务