最近要做一个订单自动过期的功能,服务器是centos6,有两个选择,一个是系统的crond一个是mysql 的 event(时间触发器),不过由于业务的复杂程度,所以选择了crond,有些同学可能搞不明白crond和crondtab有啥关联,区别如下
crond的概念和crontab是不可分割的。crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语chronos(χρόνος),原意是时间。而crond正是它的守护进程。
crond的其他命令不做过多介绍,只介绍用到的命令
首先查看crond服务的状态:
/sbin/service crond status
/sbin/service crond stop
vim /etc/crontab
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
翻译过来就是:
* * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
注意:日和周不能同时使用
举几个常见的栗子:
30 20 * * * /sbin/service httpd restart
表示每天晚上的9点30重启一次apache服务器
* 23-7/1 * * * /sbin/service httpd restart
表示每天23点到7点,每隔一小时就重启了apache服务器
0 0 1,15 * * fsck /home
表示每月1号和15号检查/home 磁盘
30 * * * * /home/bruce/backup
表示每小时的第30分执行/home/bruce/backup这个文件
30 6 */10 * * ls
表示每隔10天的6:30执行一次ls命令
*/1 * * * * ls
代表每分钟执行一次ls命令
0 0 31 * * curl http://www.baidu.com
表示每月的31日0点0分访问一次百度
/sbin/service crond start
或者
/sbin/service crond restart
tail -f /var/log/cron