1.什么是定时任务 crond是linux下用来定期执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完 成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。有点类似于闹钟。
特殊需求:crond服务搞不定了,一般工作中写脚本守护程序执行。 Linux下的任务调度分为两类,系统任务调度和用户任务调度。(守护进程:持续运行的程序)
类似的定时任务还有:at,anacron,但这两个生产工作中很少使用,可以忽略
1.1 系统任务调度:
系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。
在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。 /etc/crontab文件包括下面几行:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
2.2 用户任务调度:
用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。
用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。
2.crontab工具的使用 (1)crontab的使用格式
crontab常用的使用格式有如下两种: crontab [-u user] [file] crontab [-u user] [-e|-l|-r |-i]
选项含义如下:
PS : crontab [-e|-l|-r |-i]其实就是操作/etc/spool/cron/下的用户文件
(2)crontab文件的含义
wKiom1eYsuLhMftxAAGHfSDjyBc388.jpg-wh_50
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,
它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下: minute hour day month week command 其中:
在以上各个字段中,还可以使用以下特殊字符:
同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
(3)crontab文件举例
0 */3 * * * /usr/local/apache2/apachectl restart
#表示每隔3个小时重启apache服务一次。
30 3 * * 6 /webdata/bin/backup.sh
#表示每周六的3点30分执行/webdata/bin/backup.sh脚本的操作。
0 0 1,20 * * fsck /dev/sdb8
#表示每个月的1号和20号检查/dev/sdb8磁盘设备。
10 5 */5 * * echo "">/usr/local/apache2/log/access_log
#表示每个月的5号、10号、15号、20号、25号、30号的5点10分执行清理apache日志操作。
PS:周和日尽量不要同时用,否则可能达不到想要的效果
例:每周日,上午9点听课
00 09 * * 0 听课
3.crontab实战步骤及注意事项 3.1crontab打包实战
1)进入打包文件或目录的上级目录进行打包
2)定时任务是按小时,打包里的日期也要精确到小时
3)确保命令执行正确,然后写到脚本(复制)
4)定时任务命令或程序最好写到脚本里执行
5)测试脚本正确性(定时任务怎么写,命令行就怎么测试)
6)脚本测试好了,命令行的命令也要复制
7)脚本的路径是要有规范
8)定时打包或处理其他工作,不要再屏幕输出,可以打到日志文件里
3.2工作中调试定时任务的方法
1)增加执行任务频率调试任务
每分钟或者系统时间之后5分钟执行,看看结果对不对
某些任务不能用于生产环境,没有测试机会
代码,配置变更发布流程:
个人开发环境--办公测试环境--IDC机房测试环境--IDC正式环境(分组,灰度发布)
2)调整系统时间调试任务(不能直接用于生产环境)保持5分钟
3)通过脚本日志输出调试定时任务
4)注意一些任务命令带来的问题
tar zcvf echo 123 >a.log
5)注意:环境变量导致定时任务故障(jave)
6)通过crond定时任务服务日志调试定时任务(/var/log/cron)
7)其他方法
3.3crontab注意事项
1)为定时任务规则加必要的注释
2)执行shell脚本任务前加/bin/sh
3)定时任务命令或脚本结尾加>/dev/null 2>&1
4)定时任务命令或程序最好写到脚本里执行
5)在指定用户下执行相关的定时任务
6)生产任务程序不要随意打印输出信息
tar zcvf echo 123 >a.log
7)定时任务执行的脚本要规范路径(/server /scripts)
8)配置定时任务规范操作过程
PS:“/dev/null 2>&1”表示先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null因此标准错误也会重定向到/dev/null,避免邮件日志问题
原文:https://www.cnblogs.com/yihr/p/12963067.html