如何在没有 CPanel 的情况下正确执行 CRON 作业?

How to properly execute a CRON job without CPanel?

我尝试使用多种变体,但自从我搬到另一个主机后,未能 运行 正确地执行 CRON 作业。

在我刚刚调用 http link 之前,如下图所示:

文件名 /cron/synchronize.php 包含以下代码:

<?php shell_exec('php /var/www/domain.com/artisan domaincom:cron argument1 argument2 --option1');?>

我找不到真正的crontab文件存储在哪里,所以我可以复制真正的代码...

现在,当我使用新主机时,我通过终端转到 /var/spool/cron,然后在命令行 crontab -e 中输入代码:

SHELL=/bin/bash
HOME=/
0 8,12,14,16,19,23 * * * php /var/www/domain.com/cron/synchronize.php

那个代码不起作用,谁能告诉我我做错了什么?

您应该检查您的用户是否有权执行 cron 作业。当您登录到您的 VPS 时,您使用特定用户登录(除非您使用 root 访问权限)。

因此您可以在 /etc/cron.allow 查看您的用户是否列在那里。如果不是,您可以在一行中添加您的用户名。还要检查 /etc/cron.deny 以查看是否列出了您的用户名,或者是否列出了 ALL。如果 ALL 在那里列出,则意味着您肯定需要将您的用户名添加到 /etc/cron.allow

您当前的 cron 设置为 运行 一个 PHP 然后调用另一个 PHP 脚本。您可以通过在 crontab 中调用该命令来大大简化此操作:

0 8,12,14,16,19,23 * * * php /var/www/domain.com/artisan domaincom:cron argument1 argument2 --option1

正如其他人在评论中所述,将输出发送到文件可能有助于故障排除。这可以通过在命令末尾添加 >> ~/output.txt 来完成,以将输出存储在主目录中名为 output.txt 的文件中(当然,您可以选择任何其他路径)。