crontab


linux的系统调度配置,可以周期或指定时间指定任务.最小单位是分.

安装crontab

// 安装
yum install -y cronie
systemctl enable crond
systemctl status crond
systemctl reload crond // 重新加载配置
systemctl restart crond

基本信息

名称 说明
crond 守护进程
crontab 命令行
// 查看运行情况
ps aux | grep crond
// 日志信息
/var/log/cron
// 该文件中所列用户不允许使用crontab命令
/etc/cron.deny
// 该文件中所列用户允许使用crontab命令
/etc/cron.allow
// 列出定时任务
crontab -u nginx -l
// 终止定时任务,会删除指定用户的所有任务,如:/var/spool/cron/nginx
crontab -u nginx -r
// 查看日志
tail -f /var/log/cron
crontab [options]

* * * * *  <command> 
OR 
* * * * * <path/to/script>

系统任务调度

vim /etc/crontab

# 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
minute hour day-date month day-name
0-59 0-23 1-31 1-12 0-6

用户任务调度

cd /var/spool/cron

添加定时任务

// 为nginx用户添加相关任务
crontab -u nginx -e
minute hour day-date month day-name command
*/5 3-6 * */2 0,6 echo "Hello World!">>/tmp/crontab.txt
字段 说明
minute */5 间隔,每5分钟,即5的倍数则执行
hour 3-6 区间,3点到6点
day-date * 循环,每天
month */2 间隔,每2个月,即2的倍数则执行
day-name 0,6 选择,周六和周日
// 查看nginx用户的相关任务
crontab -u nginx -l

添加laravel任务调度

cron.txt

* * * * * php /path/artisan schedule:run >> /dev/null 2>&1
/dev/null 2>&1
表示先将标准输出重定向到/dev/null,
然后将标准错误重定向到标准输出,
由于标准输出已经重定向到了/dev/null,
因此标准错误也会重定向到/dev/null,
这样日志输出问题就解决了。

方法一

// 附加新的任务到nginx用户下
cat cron.txt >> /var/spool/cron/nginx
// 重新加载配置文件
systemctl reload crond

方法二

// 指定要执行的任务文件,这样做会直接覆盖/var/spool/cron/nginx,推荐用方法一
crontab -u nginx cron.txt