crontab
- crontab 是一个用于设置周期性被执行的任务工具。
- 周期性执行的任务列表称为Cron Table
crontab(选项)(参数)
- -e:编辑该用户的计时器设置;
- -l:列出该用户的计时器设置;
- -r:删除该用户的计时器设置;
- -u<用户名称>:指定要设定计时器的用户名称。
crontab 实践
- 安装并检查Crontab 服务
- crontab 基本组成
- crontab 的配置文件
- crontab 工具的使用
- crontab 的日志
- crontab 常见错误
- 检查Crontab 服务
[root@xuexi-001 ~]# service crond status ······//检查crond 服务状态
Redirecting to /bin/systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since 日 2018-06-17 14:18:25 CST; 7h ago
Main PID: 541 (crond)
CGroup: /system.slice/crond.service
└─541 /usr/sbin/crond -n
6月 17 14:18:25 xuexi-001 systemd[1]: Started Command Scheduler.
6月 17 14:18:25 xuexi-001 systemd[1]: Starting Command Scheduler...
6月 17 14:18:26 xuexi-001 crond[541]: (CRON) INFO (RANDOM_DELAY will be ...)
6月 17 14:18:26 xuexi-001 crond[541]: (CRON) INFO (running with inotify ...)
Hint: Some lines were ellipsized, use -l to show in full.
列出服务项需要执行的操作
[root@xuexi-001 ~]# service crond
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.
- 安装crontab
- -yum install -y vixie-cron
- -yum install -y crontabs
案例
每分钟都打印当前时间到一个日志文件中
[root@xuexi-001 ~]# crontab -e ··· 编辑crontab任务
*/1 * * * * date >> /tmp/date.txt
[root@xuexi-001 ~]# crontab -l ····· 列出当前crontab 任务
*/1 * * * * date >> /tmp/date.txt
[root@xuexi-001 ~]# date
2018年 06月 17日 星期日 21:43:17 CST
[root@xuexi-001 ~]# tail -f /tmp/date.txt ······ 动态显示date.txt文件内容
2018年 06月 17日 星期日 21:43:01 CST
2018年 06月 17日 星期日 21:44:01 CST
2018年 06月 17日 星期日 21:45:01 CST
crontab 的基本组成
系统服务 crond:每分钟都会从配置文件刷新定时任务。
配置文件:文件方式设置定时任务。
配置工具crontab:用于调整定时任务。
crontab 的配置文件格式
# .---------------- 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
# | | | | |
# * * * * * user-name command to be executed
案例
每晚的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
每隔两分钟重启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 18-23 * * * service httpd restart
小结:
- 表示任何时候都匹配
- 用”A,B,C“表示A或者B或者C时执行命令
- “A-B”表示A-B之间时执行命令
- “*/A”表示每A分钟(小时等)执行一次命令
crontab 配置文件 /etc/crontab
crontab 默认的保存的日志文件 /var/log/cron
第三和第五个域之间执行的是“或”操作
- 四月的第一个星期日早晨1时59分运行 a.sh
59 1 1-7 4 *test ` date+%w ` -eq 6 && /root/a.sh
%w 一星期中的第几日(0-6),0 代表周一
两小时运行一次
0 */2 * * * date
案例: crontab 中最小只能设置到每分钟执行一个命令,如果想每半分钟执行某个命令怎么做到呢?
- 通过shell脚本的sleep 命令配合crontab 即可完成这一功能
- date && sleep 0.5s && date
[root@xuexi-001 ~]# crontab -e
*/1 * * * * date >> date.log
*/1 * * * * sleep 30s; date >> date.log
[root@xuexi-001 ~]# cat date.log
2018年 06月 18日 星期一 00:34:01 CST
2018年 06月 18日 星期一 00:34:32 CST
2018年 06月 18日 星期一 00:35:01 CST
2018年 06月 18日 星期一 00:35:31 CST