Linux计划任务Crontab实例详解

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实例
  • 每晚的21:30重启apache
1
30 21 * * * service httpd restart
  • 每月的1,10,22日的4:45重启apache
1
45 4 1,10,22,* * service httpd restart
  • 每月的1到10日的4:45重启apache
1
45 4 1-10 * * service httpd restart
  • 每隔两分钟重启apache服务器
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
  • 在每天的10:31开始,每隔2小时重复一次
1
31 10-23/2 * * * root /home/test.sh
  • 每天的10:30开始,每隔2小时重复一次
1
30 10-23/2 * * * root /home/test.sh
  • 每周一到周五9:30
1
30 9 * * 1-5 root /home/test.sh
  • 每周一到周五8:00,每周一到周五9:00
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分钟(小时等)执行一次命令