2.4.2 周期性执行任务:cron
有一些任务是需要周期性执行的,比如说每天早晨的闹钟会在设定的时间准时响起。在Linux中,可以利用cron工具做这种设置。首先需要确定crond进程在运行,如果没有运行,需要先启动该进程。
- [root@localhost ~]# service crond start
Starting crond: [ OK ]
[root@localhost ~]# service crond status
crond (pid 3257) is running...
用户可通过crontab来设置自己的计划任务,并使用-e参数来编辑任务。在这之前需要先了解一下设置的“语法”,当使用crontab-e进入编辑模式时,需要编辑执行的时间和执行的命令。在下面的示例中,前面5个可以用来定义时间,第一个表示分钟,可以使用的值是1~59,每分钟可以使用和/1表示;第二个表示小时,可以使用的值是0~23;第三个表示日期,可以使用的值是1~31;第四个表示月份,可以使用的值是1~12;第五个表示星期几,可以使用的值是0~6,0代表星期日;最后是执行的命令。当到了设定的时间时,系统就会自动执行定义好的命令,设置crontab的基本格式如下所示。
- * command
设置crontab的语法比较难以理解,这里举一些例子方便大家更好地理解,如下所示:
- * service httpd restart
*/1 service httpd restart
#
这两种写法其实是一致的,都是每分钟重启httpd
进程。请注意,这只是一个例子,
除非你有确定的目的,否则不要在实际生产环境中这么设置
/1 * service httpd restart
#
每小时重启httpd
进程
* 23-3/1 * service httpd restart
#
从23
点开始到3
点,每小时重启httpd
进程
30 23 * service httpd restart
#
每天晚上23
点30
分重启httpd
进程
30 23 1 service httpd restart
#
每月的第一天晚上23
点30
分重启httpd
进程
30 23 1 1 * service httpd restart
#
每年1
月1
日的晚上23
点30
分重启httpd
进程
30 23 0 service httpd restart
#
每周日晚上23
点30
分重启httpd
进程
设置完成后,可以使用crontab-l查看设置的任务,也可以使用crontab-r删除所有的任务,如下所示:
- [root@localhost ~]# crontab -l
30 23 0 service httpd restart
[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -l
no crontab for root
与at类似,每个用户都可以设置自己的crontab,如果由于特殊的原因需要禁止某些用户使用这个功能,可以将该用户的用户名添加至/etc/cron.deny中。除了root之外,普通用户只可以设置、查看、删除自己的计划任务,root可以使用-u参数查看指定用户的任务。比如root可以查看用户john的任务列表:
- [root@localhost ~]# crontab -u john -l