使用 crontab 做定时服务

jopen 9年前

使用crontab做定时服务

基本命令

  • crontab -e 编辑任务
  • crontab -l 列出任务

时间格式

  • f1 f2 f3 f4 f5 program
    • f1:分钟
    • f2:小时
    • f3:一个月中的第几天
    • f4:月份
    • f5:一个星期中的第几天
  • f1为 a-b 表示从a分钟到b分钟内执行
  • f2为 a-b 表示从a小时到b小时内执行
  • f1为 */n 表示n分钟个时间间隔执行一次
  • f2为 */n 表示每n小时个时间间隔执行一次
  • f1为 a, b, c,… 时表示第 a, b, c… 分钟要执行
  • f2为 a, b, c,… 时表示第 a, b, c… 个小时要执行

Samples

  1. * * * * * command
    每分钟执行一次
  2. 3,15 * * * * command
    每小时的第 3 15 分钟执行一次
  3. 3,15 8-11 * * * command
    上午8点到11点的第3 15分钟执行一次
  4. 3,15 8-11 */2 * * command
    每隔两天的上午8点到11点的第3 15分钟执行一次
  5. 3,15 8-11 * * 1 command
    每个星期一的上午8点到11点的第3和第15分钟执行
  6. 30 21 * * * command
    每晚的21:30执行
  7. 45 4 1,10,22 * * command
    每月1、10、22日的4 : 45执行
  8. 10 1 * * 6,0 command
    每周六、周日的1 : 10执行
  9. 0,30 18-23 * * * command
    每天18 : 00至23 : 00之间每隔30分钟执行
  10. 0 23 * * 6 command
    每星期六的晚上11 : 00 执行
  11. * */1 * * *
    每小时执行一次
  12. * 23-7/1 * * *
    晚上11点到早上7点之间,每隔一小时执行
  13. 0 11 4 * mon-wed
    每月的4号与每周一到周三的11点执行
  14. 0 4 1 jan *
    一月一号的4点
  15. 01 * * * * root run-parts /etc/cron.hourly
    每小时执行/etc/cron.hourly目录内的脚本
    ** run-parts这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是目录名了 **

注意事项

  • 手动可执行任务,但无法自动执行,需要注意环境变量

    • 脚本中涉及文件路径时写全局路径
    • 脚本执行要用到java或其他环境变量时,通过source命令引入环境变量
    cat start_cbp.sh  #!/bin/sh  source /etc/profile  export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf  /usr/local/jboss-4.0.5/bin/run.sh -c mev &
  • 清理系统用户的邮件日志
  • 新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
  • 当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。