crontab是一个用于设置周期性被执行任务的工具,类似于Windows系统中的任务计划程序。
安装并检查crontab服务
- 检查crond工具是不是安装:
crontab -l #任务列表
- 检查crond服务是否启动:
service crond status #查看crontab状态
安装crontab
yum install vixie-cron #安装
chkconfig crond on #设为开机启动,先要安装chkconfig(yum install chkconfig)
service crond start #启动
service crond stop #停止
/etc/rc.d/init.d/crond restart #重启
/etc/rc.d/init.d/crond reload #不中断服务,重新载入配置
设置任务计划
/home/test.sh #要自动执行的脚本程序路径
chmod +x /home/test.sh #对脚本文件添加执行权限,否则不能执行
crontab -e #编辑配置文件,在最后一行添加内容
30 1 * * * root /home/test.sh #表示每天凌晨1点30分执行脚本
:wq! #保存退出
crontab文件的格式
minute hour day month weekday username command
minute:分,值为0-59
hour:小时,值为1-23
day:天,值为1-31
month:月,值为1-12
weekday:星期,值为0-6(0代表星期天,1代表星期一,以此类推)
username:要执行程序的用户,一般设置为root
command:要执行的程序路径(设置为绝对路径)例如:/home/test.sh
crontab实例
1
| 30 21 * * * service httpd restart
|
1
| 45 4 1,10,22,* * service httpd restart
|
1
| 45 4 1-10 * * service httpd restart
|
1 2
| */2 * * * * service httpd restart 1-59/2 * * * * service httpd restart
|
- 晚上11点到早上7点之间,每隔一小时重启apache
1
| 0 23-7/1 * * * service httpd restart
|
- 每天18:00至23:00之间每隔30分钟重启apache
1 2
| 0,30 18-23 * * * service httpd restart 0-59/30 18-23 * * * service httpd restart
|
- 每周一到周五的11:41开始,每隔10分钟执行一次
1 2 3
| 41,51 11 * * 1-5 root /home/test.sh
1-59/10 12-23 * * 1-5 root /home/test.sh
|
1
| 31 10-23/2 * * * root /home/test.sh
|
1
| 30 10-23/2 * * * root /home/test.sh
|
1
| 30 9 * * 1-5 root /home/test.sh
|
1
| 0 8,9 * * 1-5 root /home/test.sh
|
- 每周一到周五9:25到11:35之间、13:00到15:00之间,每隔10分钟运行一次
1 2 3 4 5 6 7
| 25,35,45,55 9 * * 1-5 root /home/test.sh
5-59/10 10 * * 1-5 root /home/test.sh
5,15,25,35 11 * * 1-5 root /home/test.sh
*/10 13-15 * * 1-5 root /home/test.sh
|
- 每周一到周五8:30、8:50、9:30、10:00、10:30、11:00、11:30、13:30、14:00、14:30、5:00分别执行一次
1 2 3 4 5 6 7 8 9
| 30,50 8 * * 1-5 root /home/test.sh
30 9 * * 1-5 root /home/test.sh
*/30 10-11 * * 1-5 root /home/test.sh
30 13 * * 1-5 root /home/test.sh
0,30 14-15 * * 1-5 root /home/test.sh
|
1
| `crontab -e -u root` #为某个用户添加计划任务
|
- crontab中最小只能设置到每分钟执行一个命令,如果想每半分钟执行某个命令,可以通过shell脚本的sleep命令配合crontab即可完成这一功能
1
| */1 * * * * sleep 30s; echo "this is a test!!"
|
小结:
- *,表示任何时候都匹配
- 可以用“A,B,C”表示A或者B或者C时执行命令
- 可以用“A-B”表示A到B之间时执行命令
- 可以用“*/A”表示每A分钟(小时等)执行一次命令