我在Apache / CPanel共享服务器上为Laravel应用程序实现Cron Job时遇到问题。我有一个任务命令,无论何时从命令行运行它,它都可以正常运行;每天调用时,它也可以正常运行,但是它没有按“一天一次”的时间表运行。
仅当Laravel命令也被称为everyMinute()
时,Cron Job波纹管才能在每分钟被调用时完美工作,如下所示:
定时通话
php -d register_argc_argv=On /home/path/domain.com/artisan schedule:run > /dev/null 2>&1
服务器时间表* * * * *
Laravel命令:
$schedule->command('alert:dailly')->everyMinute();
问题是,我真正想要执行的命令每天执行一次,但这行不通。相同的命令每分钟运行一次,但每天只有一次没有被调用,如下所示:
定时通话
php -d register_argc_argv=On /home/path/domain.com/artisan schedule:run > /dev/null 2>&1
服务器时间表0 0 * * *
Laravel命令:
$schedule->command('alert:dailly')->cron('0 0 * * * *');
或
$schedule->command('alert:dailly')->daily();
有什么问题吗?
谢谢!
我有一个类似的问题,但从未找到真正的原因。我通过在特定时间和后台强制执行每日程序来解决此问题。您的代码将是(假设您想在凌晨1:30运行它):
$schedule->command('alert:dailly')->dailyAt('01:30')->runInBackground();
[我还注意到,我不得不每半刻钟运行一次命令。所以(小时):00,(小时):15,(小时):30和(小时):45算出来,(小时):03例如不是。
这可能是托管问题(在我的情况下为A2hosting.com,已共享),但是知识库并不能使我变得更明智。值得尝试。一次运行一次即可使用Linux命令top -ac
监视该过程,以便查看该命令是否实际执行。
如果这对您有用,请不要问我为什么。我必须通过反复试验为自己找到这种解决方案。
[我想指出,如in this PHP 'bug' report所述,您的cron调用永远不会到达register_argc_argv=On
参数。尝试不带任何参数地运行它。
php /home/path/domain.com/artisan schedule:run > /dev/null 2>&1
除非您的托管服务提出不同建议。