我在CentOS上生产了一个Laravel 5.7 项目。该项目安排了一项任务:
$schedule->command('import:producers --create --update --afterOrEqual="-5 minutes"')
->everyFiveMinutes()
->appendOutputTo(
storage_path('logs/schedule/producers_import.log')
);
根据logs/schedule/producers_import.log
中的最后一条日志,此方法一直有效,直到 2019-05-30 服务器由于某种原因重新启动。
现在计划的任务不是由cron作业“自动”运行,而是如果我cd
至my-project
并在适当的时间手动运行:
$ php artisan schedule:run
Running scheduled command: '/usr/bin/php' 'artisan' import:producers --create --update --afterOrEqual="-5 minutes" >> '/var/www/my-project/storage/logs/schedule/producers_import.log' 2>&1
上面的命令在
logs/schedule/producers_import.log
中生成一个新日志。
这对我来说很奇怪,因为cron日志显示调度程序正按预期每分钟被调用:
$ cat /var/log/cron
...
Jun 19 08:57:01 my-server-name CROND[29679]: (admin) CMD (php /var/www/my-project/artisan schedule:run >> /dev/null 2>&1)
Jun 19 08:58:01 my-server-name CROND[29724]: (admin) CMD (php /var/www/my-project/artisan schedule:run >> /dev/null 2>&1)
Jun 19 08:59:01 my-server-name CROND[29739]: (admin) CMD (php /var/www/my-project/artisan schedule:run >> /dev/null 2>&1)
Jun 19 09:00:01 my-server-name CROND[29754]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jun 19 09:00:01 my-server-name CROND[29755]: (root) CMD (/bin/bash /etc/SomeOtherScript.sh)
Jun 19 09:00:01 my-server-name CROND[29756]: (admin) CMD (php /var/www/my-project/artisan schedule:run >> /dev/null 2>&1)
Jun 19 09:00:32 my-server-name crontab[29784]: (admin) LIST (admin)
Jun 19 09:01:01 my-server-name CROND[29787]: (root) CMD (run-parts /etc/cron.hourly)
Jun 19 09:01:01 my-server-name CROND[29788]: (admin) CMD (php /var/www/my-project/artisan schedule:run >> /dev/null 2>&1)
Jun 19 09:01:01 my-server-name run-parts(/etc/cron.hourly)[29787]: starting 0anacron
Jun 19 09:01:01 my-server-name run-parts(/etc/cron.hourly)[29798]: finished 0anacron
Jun 19 09:02:01 my-server-name CROND[29813]: (admin) CMD (php /var/www/my-project/artisan schedule:run >> /dev/null 2>&1)
Jun 19 09:03:01 my-server-name CROND[29836]: (admin) CMD (php /var/www/my-project/artisan schedule:run >> /dev/null 2>&1)
Laravel任务永远不会被调用,因为它不会在
logs/schedule/producers_import.log
中生成任何日志,并且数据库也不会因命令的副作用而改变。
2019-05-30 以来的(活动)cron服务:
$ systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-05-30 17:28:05 -04; 2 weeks 5 days ago
Main PID: 27650 (crond)
CGroup: /system.slice/crond.service
└─27650 /usr/sbin/crond -n
Jun 18 11:26:38 my-server-name systemd[1]: Started Command Scheduler.
Jun 18 11:26:38 my-server-name crond[27650]: (CRON) INFO (RANDOM_DELAY will be scaled with f...d.)
Jun 18 11:26:38 my-server-name crond[27650]: (CRON) INFO (running with inotify support)
Jun 18 11:26:38 my-server-name crond[27650]: (CRON) INFO (@reboot jobs will be run at comput...p.)
Hint: Some lines were ellipsized, use -l to show in full.
cron条目:
$ crontab -l
* * * * * php /var/www/my-project/artisan schedule:run >> /dev/null 2>&1
老实说,我不知道如何进行。还有其他服务可以检查状态吗?
我如何更好地监控cron作业,以发现为什么在 2019-05-30 之后不调用Laravel任务的原因?