Crontab 是Unix 系统中基于时间的任务管理工具。php
这个命令与传统的 Unix 命令不同,下面会一一介绍其规则及其用法。html
crontab 仍是 cron?初次接触 crontab 的同窗可能会被这两个词给绕晕。linux
其实能够这样来理解:crontab
就是 cron
服务的命令行工具,而cron
则是背后处理crontab
投递任务的服务。服务器
crontab 命令是以固定的时间格式来使用的,工具
表示意义 | 分钟 | 小时 | 日期 | 月份 | 周 | 命令 |
---|---|---|---|---|---|---|
范围 | 0~59(*) | 0~23(*) | 1~31(*) | 1~12(*) | 0~7(*) | 须要执行的命令 |
另外还有一些特殊字符具备特殊含义:spa
*
表示任什么时候刻都接收。举个栗子:* 12 * * *
表示不论何月、何日的星期几的十二点都执行指定命令。每分钟执行一次:命令行
*/1 * * * * 或者 * * * * *
每五分钟执行一次:nuxt
*/5 * * * *
每小时执行一次:rest
0 * * * * 或者 0 */1 * * *
天天执行一次:日志
0 0 * * *
每周执行一次:
0 0 * * 0
每个月执行一次:
0 0 1 * 0
初次接触crontab
命令时,我也比较纳闷,这个命令倒底是如何使用的?
使用 crontab 有两种方式:
第一种方式没什么好说的,直接在终端添加 crontab 任务就好了,下面简单说一下第二种(其实二者的核心都是同样的)。
首先建立一个文件,该文件的内容以功能描述、执行时间、执行任务 这几部分组成。
其中,前二者并非必定须要,只是为了方便本身往后或其余人能快速知道这个任务具体是作什么的,#
表示注释。
示例,建立一个名称为script_cron
的crontab 文件:
# 每分钟执行一次 script.php 脚本 * * * * * /usr/bin/php ~/script.php
为了提交刚刚建立的crontab 文件,能够把这个新建立的文件名称做为crontab
命令的参数:
$ crontab script_cron
使用-l
参数列出crontab文件:
$ crontab -l # 每分钟执行一次 script.php 脚本 * * * * * /usr/bin/php ~/script.php
$ crontab -e
$ crontab -r
新建立的cron 任务,不会立刻执行,至少要过两分钟才执行。
若是但愿能立刻执行,能够重启 crontab 。
// Ubuntu: $ service cron restart // Centos $ service crond restart
有时候会遇到直接在命令行中能够执行任务,可是定时任务却怎么都不执行,
这时首先须要确认 cron 服务是否正常:
// Ubuntu: $ service cron status // Centos $ service crond status
而后确认须要执行的任务是否包含路径,若是包含请使用全局路径。
最后重启 cron 服务,一般到这里就已经能够正常执行了,若是还不行,尝试引入环境变量:
0 * * * * . /etc/profile; /usr/bin/php /var/www/script.php
须要注意的是crontab 任务的调度,只有 root 和任务全部者拥有权限。
若是想要编辑/查看/删除其余用户的任务,可使用如下命令:
$ crontab -u <username> <选项>
经常使用选项:-e
:编辑任务-l
:查看任务-r
:删除任务
当定时任务在指定时间执行时,会同步输出相似日志:
$ tail -f /var/log/syslog Nov 19 12:47:01 gigabit CRON[14521]: (root) CMD (/usr/bin/php /var/www/script.php)
此时就能够确定任务调度正常。
上面那种方式确实有效,可是并不方便,那么有没有更好的方式呢?
crontab 默认没有任务的执行记录日志,可是能够经过其余方式手动建立日志文件。
0 * * * * . /etc/profile; /usr/bin/php /var/www/script.php >> /var/log/cron.log 2>&1
在script.php
脚本最后面增长一次输出,这样每次执行完脚本就会将输出重定向至cron.log
日志文件了。