初识定时器
在Linux终端通过crontab -e命令,向文件中写入*/1 * * * * /home/ysl/tmp/SendMail.py(crontab表达式),即添加了一项每1分钟执行1次的定时任务。
crontab
表达式格式
{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}
minute: 区间为 0 – 59
hour: 区间为0 – 23
day-of-month: 区间为0 – 31
month: 区间为1 – 12. 1 是1月. 12是12月
Day-of-week: 区间为0 – 7. 周日可以是0或7
full-path-to-shell-script:shell脚本(要求绝对路径,且目录存在)
* 代表所有可能的值
/{num} 代表间隔周期
1,2,3 代表多选
1-3 代表范围
选项
crontab [ -u user ] -e:修改crontab文件。如果文件不存在会自动创建
crontab [ -u user ] -l:显示crontab文件内容
crontab [ -u user ] -r 删除crontab文件
crontab [ -u user ] -ir:删除crontab文件前提醒用户
crontab file:用$HOME目录下的文件替代目前的crontab。可用于恢复crontab文件
日志文件
位置:/var/log/cron.log
只会记录是否执行了某些计划的脚本,但是具体执行是否正确以及脚本执行过程中的一些信息并不会记录在日志文件中
进程
/etc/init.d/crond start/restart/stop
ps -ef | grep crond
案例
0 11 4 * 1-3 command line
每个月的4号与每个礼拜的礼拜一到礼拜三的早上11点
*/30 [3-5],[17-20] * * * /bin/sh /home/omc/h.sh >/dev/null 2>&1 >> /var/spool/cron/root
每天3-5,17-20每隔30分钟执行一次脚本
0 14 * * 5 date_time=`date +’\%Y-\%m-\%d \%H:\%M:\%S’` && /home/ysl/tmp/SendMail.py >> “/home/ysl/tmp/SendMail-$date_time.log” 2>&1 &
每周五14点执行/home/ysl/tmp/SendMail.py,并将日志输出到/home/ysl/tmp/SendMail-{运行时间}.log文件中。
!!注意:crontab文件中无法理解%的含义,因而需要将%转义。
crontab注意事项
- 在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’。否则会出现,手动执行脚本OK,crontab死活不执行的情况
- crontab执行shell时,不能识别Java的环境变量,只能识别为数不多的环境变量,普通的环境变量是无法识别的,所以在编写shell时,最好使用export重新声明变量,确保脚本执行。引用环境变量时需要,*/1 * * * * source /etc/profile && …
- root用户的任务调度操作可以通过“crontab –uroot –e”来设置,也可以将调度任务直接写入/etc/crontab文件,需要注意的是,如果要定义一个定时重启系统的任务,就必须将任务放到/etc/crontab文件,即使在root用户下创建一个定时重启系统的任务也是无效的
- 定时任务里面的程序脚本尽量用全路径
- 当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题
定时任务分类
Linux下的任务调度分为两类,系统任务调度和用户任务调度。
系统任务调度
系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。
/etc/crontab文件,这个就是系统任务调度的配置文件。
查询系统定时处理任务的路径: 路径1: cd /etc/logrotate.d/ -->可以写定时任务 less syslog 路径2: cat /etc/crontab -->不推荐使用,但是可以看格式 路径3: ls /etc/ | grep cron* anacrontab cron.d -->同路径2 ,可以写定时任务 cron.daily cron.deny -->控制普通用户使用定时任务crontab cron.hourly cron.monthly crontab cron.weekly
用户任务调度
用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。
用户可以使用 crontab -e来定制自己的计划任务。
用户crontab文件都被保存在/var/spool/cron/目录中。其文件名与用户名一致
周边
通过at命令来控制在指定的时间运行任务
at -f test-cron.sh -v 10:25
其中-f 指定脚本文件, -v 指定运行时间
参考
https://www.cnblogs.com/aminxu/p/5993769.html
https://blog.csdn.net/weixin_41712499/article/details/99437222
https://www.cnblogs.com/ftl1012/p/crontab.html