1

我在 Apache/CPanel 共享服务器上为我的 Laravel 应用程序实现 Cron 作业时遇到问题。我有一个任务命令,只要我从命令行运行它就可以正常工作,并且每天调用时也可以正常工作,但它没有按“每天一次”计划运行。

只有当 Laravel 命令也被调用时,Cron Job 才能在每分钟调用时完美运行everyMinute(),如下所示:

cron 调用

php -d register_argc_argv=On /home/path/domain.com/artisan schedule:run > /dev/null 2>&1

服务器时间表* * * * *

Laravel 命令:

$schedule->command('alert:dailly')->everyMinute();

问题是我真正想要工作的命令是每天一次,这不起作用。曾经每分钟运行良好的相同命令只是在每天一次时不会被调用,如下所示:

cron 调用

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();

有什么问题吗?

谢谢!

4

2 回答 2

2

您无需在日常通话中更改服务器时间表。

您的服务器上应该有一个工匠 cron,如下所示:

* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

此 cron 将每 1 分钟调用一次,当它调用时,Laravel 将评估您的计划任务。

稍后在您的代码中使用每日:

$schedule->command('cmd-name:op')->daily();

Daily 将在每天午夜运行任务。

对于其他时间表频率,请查看文档

于 2019-11-11T07:36:22.613 回答
0

我有一个类似的问题,从来没有发现真正的原因。我通过在特定时间和后台强制执行日常执行来解决它。然后您的代码将是(假设您想在早上 1:30 运行它):

$schedule->command('alert:dailly')->dailyAt('01:30')->runInBackground();

我还注意到我必须在一刻钟运行命令。所以(小时):00,(小时):15,(小时):30和(小时):45计算出来,(小时):03例如不是。

这可能是一个托管问题(在我的情况下是 A2hosting.com,共享),但知识库并没有让我变得更聪明。值得一试。一次运行它,您可以使用 Linux 命令监视进程,top -ac以便查看该命令是否实际执行。

如果这对你有用,不要问我为什么。我不得不通过反复试验为自己找到这个解决方案。

我想指出,正如这个 PHP 'bug' 报告中所解释的,你的 cron 调用永远不会到达register_argc_argv=On参数。尝试在没有任何参数的情况下运行它。

php /home/path/domain.com/artisan schedule:run > /dev/null 2>&1

除非您的托管服务有不同的建议。

于 2019-11-11T05:52:55.853 回答