Linux的crontab

cron服务是linux的内置服务:

/sbin/service crond start
/sbin/service crond stop
/sbin/service crond restart
/sbin/service crond reload
分别为启动、停止、重启服务和重新加载配置。

cron服务每分钟不仅要读一次 /var/spool/cron 目录内的所有文件,还需要读一次 /etc/crontab 文件。配置这个文件也能让cron执行任务。使用crontab命令是对用户级任务的配置,而编辑 /etc/crontab 文件是对系统级任务的配置。

说明 :
crontab 是用来让使用者在固定时间或固定间隔执行程序之用。

参数 :
crontab -e : 执行文字编辑器来设定日程表
crontab -r : 删除目前的日程表
crontab -l : 列出目前的日程表
crontab -u : 设定某个用户的cron服务
crontab file [-u user] 用指定的文件替代目前的crontab。

如当前是root身份,要查看/编辑/删除/某用户的crontab,只需在相应的命令后加上 -u USERNAME(如 crontab -e -u USERNAME)

配置系统级的任务,编辑 /etc/crontab 文件,此文件的文件格式是:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
HOME=/ //使用者运行的路径,这里是根目录

# run-parts

01 * * * * root run-parts /etc/cron.hourly //每小时执行/etc/cron.hourly内的脚本
02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行/etc/cron.weekly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本

注意”run-parts”这个参数,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了。

基本格式 :
*  *  *  *  * command
分 时  日  月 周  命令

第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列表示星期0~6(0表示星期天)
第6列要运行的命令

当 第1列 为 * 时表示每分钟都要执行 command,第2列 为 * 时表示每小时都要执行程序,其余类推
当 第1列 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,第2列 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推
当 第1列 为 */n 时表示每 n 分钟个时间间隔执行一次,第2列 为 */n 表示每 n 小时个时间间隔执行一次,其余类推
当 第1列 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,第2列 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其余类推
使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定日程表。

每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。cron启动后每过一分钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。

例子:
30 21 * * * root /etc/init.d/php-fpm reload > /dev/null 2>&1
上面的例子表示以root的身份每晚的21:30重启php-fpm。

45 4 1,10,22 * * /etc/init.d/php-fpm reload
上面的例子表示每月1、10、22日的4 : 45重启php-fpm。

10 1 * * 6,0 /etc/init.d/php-fpm reload
上面的例子表示每周六、周日的1 : 10重启php-fpm。

0,30 18-23 * * * /etc/init.d/php-fpm reload
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启php-fpm。

0 23 * * 6 /etc/init.d/php-fpm reload
上面的例子表示每星期六的11 : 00 pm重启php-fpm。

* */1 * * * /etc/init.d/php-fpm reload
每一小时重启php-fpm

* 23-7/1 * * * /etc/init.d/php-fpm reload
晚上11点到早上7点之间,每隔一小时重启php-fpm

0 11 4 * mon-wed /etc/init.d/php-fpm reload
每月的4号与每周一到周三的11点重启php-fpm

0 4 1 jan * /etc/init.d/php-fpm reload
一月一号的4点重启php-fpm

18 16 * * * root run-parts /home/username/cron > /dev/null 2>&1
每天的16:18执行一个脚本集合,把所有要执行的脚本放到一个目录中(如 /home/username/cron)

注意 :

当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可,> /dev/null 2>&1 表示把所有标准输出发送到 /dev/null(linux的回收站),把标准错误输出(2)发送到和标准输出(1)同样的地方(即 /dev/null),运行这行命令将不会产生任何输出。

一月 19, 2011 | In: Linux

Comment Form

You must be logged in to post a comment.