Linux 计划任务

1.计划任务基本使用

crontab命令
crontab -l 查看任务记录
crontab -e 编辑任务

/etc/init.d/crond restart 重启服务

第一列    分(0-59)
第二列    时(00-23)
第三列    日(01-31)
第四列    月(01-12)
第五列    周(0-7,0和7都代表周日)

 

crontab 语法格式

* 表示任意时间,实际就是‘每’的意思
00 23 * * * *    表示每月每周每日的23:00都执行该任务

-    减号,表示分隔符,表示一个时间范围,区间段,如17-19点
00 17-19 * * * 17,18,19整点执行

,    逗号,表示分隔时段的意思,30 17,18,19 * * * 表示17,18,19点的30分执行任务
30 3-5,17-19 * * * 3,4,5,17,18,19点的30分执行任务

/n    n代表数字,即‘每隔n单位时间’, */10 * * * * 表示每10分钟执行一遍

 

30 3,12 * * * 

每天3:30,12:20执行任务

30 */6 * * *
每隔6个半小时执行任务

30 8-18/2 * * *
8:30 ~ 18:30 每隔两个小时执行任务

30 21 * * *
每天21:30执行任务

45 4 1,10,22 * * 
每个月的1,10,22号的4点45分执行任务

10 1 * * 6,0 
每周六日的1点10分执行任务

0,30 18-23 * * * 
每天的18-23点,每隔30分钟执行任务

00 */1 * * * 
每个小时整点执行任务

* 23,00-07/1 * * * (不规范的写法)
每天23点,0-7点,每隔一小时后每分钟执行一遍执行任务

00 11 * 4 1-3
4月的周一~周三每天11点整执行任务
强调:周和日不要同时使用

2.实际工作中调试定时任务的方法:

1.增加执行任务频率调试任务
每分钟或者系统时间之后5分钟执行,看结果是否达到预期
某些任务不能用于生产环境没有测试机会
代码,配置变更发布流程:
个人开发环境--办公环境测试--IDC机房测试环境--IDC正式环境(分组,灰度发布)
2.调整系统时间调试任务(不能用于生产环境),保持5分钟
3.通过脚本日志输出调试定时任务
4.注意一些命令输出带来的问题(一些特殊字符需要转义,如%,需要换成\%)

例如:
标准输出多了,只能一次
*/1 * * * * echo "==" >> /tmp/oldboy.log > /dev/null 2>$1
%需要转义,\%
*/1 * * * * tar zvf /tmp/oldboy_$(date +%F).tar.gz /etc/hosts > /tmp/tar_error_$(date +%F).log
5.注意:环境变量导致的定时任务故障(java)
6.通过crond定时任务服务日志调试定时任务(/var/log/cron)
7.调试脚本可以用,sh -x 脚本名称

crond定时任务生产应用问题10箴言
1.系统环境变量导致定时任务执行问题
2.定时任务里面的命令要用绝对路径
3.脚本权限问题加/bin/sh
4.时间变量问题用反斜线\%转义,最好用脚本
5.>/dev/null 2&1 问题 (1) /dev/null (2)/dev/null. $>/dev/null
6.定时任务规则之前加上注释,简单说明功能
7.使用脚本程序替换命令行定时任务
8.避免不必要的程序及命令输出
9.切到目标目录的上一级打包目标
10.定时任务脚本中的程序命令尽量用全路径(和环境变量识别有关)