1. Crontab是什么?
Crontab是一个用于设置周期性被执行的任务的工具。
被周期性执行的任务叫作Cron Job,周期性执行的任务列表我们称为Cron Table。
2. 相关工具
Putty:一个免费的易用的SSH连接工具(www.putty.org 需FQ)
3. 安装并检查Crontab服务
1. 检查cron服务
- 检查Crontab工具是否安装:crontab -l
- 检查crond服务是否启动:service crond status
2. 安装cron
- yum install vixie-cron
- yum install crontabs
3. 案例:每分钟都打印当前时间到一个日志文件中
[root@localhost ~]# crontab -e # 编辑或添加任务 no crontab for root - using an empty one crontab: installing new crontab [root@localhost ~]# crontab -l # 查看任务 */1 * * * * date >> /tmp/log.txt [root@localhost ~]# date Wed Feb 8 20:48:42 CST 2017 [root@localhost ~]# tail -f /tmp/log.txt # 动态刷新文件末尾 Wed Feb 8 20:49:01 CST 2017 Wed Feb 8 20:50:01 CST 2017 ^C [root@localhost ~]#
4. Crontab的基本组成
5. Crontab的配置文件格式
- 每晚的21:30重启apache:30 21 * * * service httpd restart
- 每月1、10、22日的4:45重启apache:45 4 1,10,22 * * service httpd restart
- 每月1到10日的4:45重启apache:45 4 1-10 * * service httpd restart
- 每隔2分钟重启apache:*/2 * * * * service httpd restart 或者 1-59/2 * * * * service httpd restart
- 晚11点到早7点每隔一小时重启apache:0 23-7/1 * * * service httpd restart
- 每天18:00到23:00每隔30分钟重启apache:0,30 18-23 * * * service httpd restart 或者 0-59/30 18-23 * * * service httpd restart
6. Crontab工具的使用
[root@localhost ~]# crontab -help # 查看crontab的帮助文档 usage: crontab [-u user] file crontab [-u user] [ -e | -l | -r ] (default operation is replace, per 1003.2) -e (edit user's crontab) -l (list user's crontab) -r (delete user's crontab) -i (prompt before deleting user's crontab) -s (selinux context) [root@localhost ~]# crontab -e -u user1 # 编辑用户user1的crontab任务 no crontab for user1 - using an empty one crontab: installing new crontab You have mail in /var/spool/mail/root [root@localhost ~]# crontab -l -u user1 # 查看用户user1的crontab任务 0-58/2 * * * * echo "EVEN*********" [root@localhost ~]# tail -f /var/log/cron # 动态刷新正在执行的crontab任务
7. Crontab的配置文件:
8. Crontab的日志
/var/log/cron 文件保存着cron的任务执行记录
/var/spool/mail 下也会以邮件的方式发送日志信息
9. Crontab常见错误
1. 环境变量:不可引用环境变量
1) 进入家目录,打开隐藏文件:. bash_profile
2) 例如加入:APPROOT=/usr/local/www/
export APPROOT 并保存退出
3) 重新载入这个文件:source ./ .bash_profile
4) echo $APPROOT 就会显示刚才设置的路径
2. 命令行操作:
例:4月的第一个星期日早晨1时59分运行a.sh
59 1 1-7 4 0 /root/a.sh
59 1 1-7 4 * test `date +\%w` -eq 0 && /root/a.sh
1) test a = b 或 test a -eq b 如果结果是0则为正确,为1则为错误
2) 通过echo$? 来查看上一次的执行结果
3) date +%w 显示今天是星期几
4) A && B 表示A成立则执行B
3. 分钟设置有误:
1) 每两个小时运行一次:
错误: * 0,2,4,6,8,10,12,14,16,18,20,22 * * * date
正确: 0 */2 * * * date
4. 综合案例解析:
按顺序执行:[root@localhost ~]# date;sleep 0.5s;date
每半分钟执行一次:
*/1 * * * * date >> /tmp/date.log
*/1 * * * * sleep 30s; date >> /tmp/date.log