2.4.2 周期性执行任务:cron

有一些任务是需要周期性执行的,比如说每天早晨的闹钟会在设定的时间准时响起。在Linux中,可以利用cron工具做这种设置。首先需要确定crond进程在运行,如果没有运行,需要先启动该进程。


  1. [root@localhost ~]# service crond start

  2. Starting crond: [ OK ]

  3. [root@localhost ~]# service crond status

  4. crond (pid 3257) is running...


用户可通过crontab来设置自己的计划任务,并使用-e参数来编辑任务。在这之前需要先了解一下设置的“语法”,当使用crontab-e进入编辑模式时,需要编辑执行的时间和执行的命令。在下面的示例中,前面5个可以用来定义时间,第一个表示分钟,可以使用的值是1~59,每分钟可以使用/1表示;第二个表示小时,可以使用的值是0~23;第三个表示日期,可以使用的值是1~31;第四个表示月份,可以使用的值是1~12;第五个表示星期几,可以使用的值是0~6,0代表星期日;最后是执行的命令。当到了设定的时间时,系统就会自动执行定义好的命令,设置crontab的基本格式如下所示。


  1. * command


设置crontab的语法比较难以理解,这里举一些例子方便大家更好地理解,如下所示:


  1. * service httpd restart

  2. */1 service httpd restart

  3. #

  4. 这两种写法其实是一致的,都是每分钟重启httpd

  5. 进程。请注意,这只是一个例子,

  6. 除非你有确定的目的,否则不要在实际生产环境中这么设置

  7. /1 * service httpd restart

  8. #

  9. 每小时重启httpd

  10. 进程

  11. * 23-3/1 * service httpd restart

  12. #

  13. 23

  14. 点开始到3

  15. 点,每小时重启httpd

  16. 进程

  17. 30 23 * service httpd restart

  18. #

  19. 每天晚上23

  20. 30

  21. 分重启httpd

  22. 进程

  23. 30 23 1 service httpd restart

  24. #

  25. 每月的第一天晚上23

  26. 30

  27. 分重启httpd

  28. 进程

  29. 30 23 1 1 * service httpd restart

  30. #

  31. 每年1

  32. 1

  33. 日的晚上23

  34. 30

  35. 分重启httpd

  36. 进程

  37. 30 23 0 service httpd restart

  38. #

  39. 每周日晚上23

  40. 30

  41. 分重启httpd

  42. 进程


设置完成后,可以使用crontab-l查看设置的任务,也可以使用crontab-r删除所有的任务,如下所示:


  1. [root@localhost ~]# crontab -l

  2. 30 23 0 service httpd restart

  3. [root@localhost ~]# crontab -r

  4. [root@localhost ~]# crontab -l

  5. no crontab for root


与at类似,每个用户都可以设置自己的crontab,如果由于特殊的原因需要禁止某些用户使用这个功能,可以将该用户的用户名添加至/etc/cron.deny中。除了root之外,普通用户只可以设置、查看、删除自己的计划任务,root可以使用-u参数查看指定用户的任务。比如root可以查看用户john的任务列表:


  1. [root@localhost ~]# crontab -u john -l