在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();
有什么问题吗?
谢谢!
答案 0 :(得分:1)
您无需在日常通话中更改服务器时间表。
您的服务器上应该有一个工匠cron,如下所示:
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
此cron将每1分钟被调用一次,当它启动时,Laravel将评估您计划的任务。
稍后,您的代码将每天使用:
$schedule->command('cmd-name:op')->daily();
每天都会在午夜运行任务。
有关其他计划频率,请检查docs
答案 1 :(得分:0)
我有一个类似的问题,却没有找到真正的原因。我通过在特定时间和后台强制执行每日程序来解决此问题。这样您的代码将是(假设您想在凌晨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
除非您的托管服务有不同建议。