linux下利用crontab创建定时任务

Linux下可以利用crontab创建定时任务。

常用搭配

  • crontab -e 编辑任务
  • crontab -l 查看所有任务[该用户]
  • crontab -r 取消所有任务[该用户]

任务格式

× × × × × +命令(具体任务)

前5个参数表示时间,依次为:


参数 范围

分钟:0~59
小时:0~23
日期:1~31
月份:1~12
星期:0~6(0代表星期日)


特殊符号

为了精确表示定时,需要一些特殊符号来描述具体的任务执行时间。有以下几个符号:

  • “/” 代表每,每隔多长时间
  • “*” 代表任何时间
  • “-” 代表从某时刻到另一时刻的一段时间
  • “,” 代表离散的时间

案例

0 8 1 1 * command 每年1月1日8点执行command

*/30 ** cmd 每隔30分钟执行command

0 6-18 * cmd 每天6点到18点执行command

30 6,9,12 * cmd 每天6点30、9点30、12点30执行command

0 6-18/3 * /usr/bin/php /var/www/html/save.php 每天6点到18点每隔3个小时用/user/bin/php执行/var/www/html/save.php

注意

crontab中设置的command都是相对路径的,所以命令中执行的脚本应当尽量设置为绝对路径。另一方面,脚本中假如有输出会输出到当前用户目录下,因此脚本中如果有路径的话,也请设置为绝对路径!

今天又踩了一次坑,特此说明一下

1.脚本执行程序使用绝对路径,如上例/usr/bin/php

2.被脚本执行的文件使用绝对路径,如上例/var/www/html/save.php

3.脚本输出、操作文件使用绝对路径,如save.php中的输出文件

附加说明

>> crontab报错会通过邮件发送给用户,centos下目录为 /var/spool/mail/user,长期积累可能造成/var/下占用空间过大,应及时清理。(dG in vi)

>> crontab -e编辑的文件实际上是/var/spool/cron/root(root为用户)

>> 要查看crontab的执行情况可以查看文件/var/log/cron