PHP - cronjob 无法在 Ubuntu 18.04 上执行 [关闭]

Posted

技术标签:

【中文标题】PHP - cronjob 无法在 Ubuntu 18.04 上执行 [关闭]【英文标题】:PHP - cronjob failing to execute on Ubuntu 18.04 [closed] 【发布时间】:2022-01-23 02:59:26 【问题描述】:

我有一个 php 文件,我想将其作为 cron 作业运行。

在服务器上,该文件位于/var/www/html/directory/file.php 并且没有错误,因为它可以通过转到www.exampledomain.com/directory/file.php 在浏览器中运行。

在文件/etc/crontab 我有以下行:

* * * * * root /usr/bin/php /var/www/html/directory/file.php >/dev/null 2>&1

在我的服务器上输入 sudo service cron status 我看到了:

● cron.service - Regular background program processing daemon
   Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2021-07-29 10:23:11 UTC; 4 months 23 days ago
     Docs: man:cron(8)
 Main PID: 769 (cron)
    Tasks: 1 (limit: 1140)
   CGroup: /system.slice/cron.service
           └─769 /usr/sbin/cron -f

Dec 21 17:46:01 ip-172-31-34-251 CRON[20648]: (ubuntu) CMD (root /usr/bin/php /var/www/html/directory/file.php >/dev/null
Dec 21 17:46:01 ip-172-31-34-251 CRON[20649]: (root) CMD (root /usr/bin/php /var/www/html/directory/file.php >/dev/null 2
Dec 21 17:46:01 ip-172-31-34-251 CRON[20647]: pam_unix(cron:session): session closed for user ubuntu
Dec 21 17:46:01 ip-172-31-34-251 CRON[20646]: pam_unix(cron:session): session closed for user root
Dec 21 17:47:01 ip-172-31-34-251 CRON[20661]: pam_unix(cron:session): session opened for user ubuntu by (uid=0)
Dec 21 17:47:01 ip-172-31-34-251 CRON[20660]: pam_unix(cron:session): session opened for user root by (uid=0)
Dec 21 17:47:01 ip-172-31-34-251 CRON[20662]: (ubuntu) CMD (root /usr/bin/php /var/www/html/directory/file.php >/dev/null
Dec 21 17:47:01 ip-172-31-34-251 CRON[20663]: (root) CMD (root /usr/bin/php /var/www/html/directory/file.php >/dev/null 2
Dec 21 17:47:01 ip-172-31-34-251 CRON[20661]: pam_unix(cron:session): session closed for user ubuntu
Dec 21 17:47:01 ip-172-31-34-251 CRON[20660]: pam_unix(cron:session): session closed for user root

cron 作业应该更新另一个文件,但没有发生。出了什么问题或者我可以做些什么来进一步解决这个问题。以前我会在托管域中使用 cron 作为服务,但最近才开始使用 ubuntu,所以不确定 linux 命令。

【问题讨论】:

* * * * * 这个表达式的意思是每一分钟。你确定这就是你想要的运行方式吗? @nice_dev 我只是将它设置为这种方式进行故障排除,当我真正开始工作时它不会经常运行 好的。您可以手动点击/usr/bin/php /var/www/html/directory/file.php 之类的命令行并检查另一个文件是否正在更新?这可能是另一个文件的权限问题。 这完全是 PHP 问题吗?还有什么工作吗?确保遵循minimal reproducible example 的精神并删除不相关的部分。此外,您主动抑制了所有输出,因此您不应该对没有得到任何诊断提示感到惊讶。 @nice_dev 是的,它可以从命令行正常工作,这是 cron 设置的问题。我在阅读另一篇帖子后添加了>/dev/null 2>&1,说它正在尝试打印一些东西并通过电子邮件发送给我,但出现错误 【参考方案1】:

不要使用 /etc/crontab 来运行您的 cron 作业。而是使用您希望在其下运行作业的用户帐户。系统 crons 的环境几乎永远不会匹配您运行您想做的工作所需的环境。所以在这种情况下,su 到 root 用户,然后是 crontab -esudo crontab -e。然后让你的条目像这样......

* * * * * /usr/bin/php /var/www/html/directory/file.php >/dev/null 2>&1

【讨论】:

谢谢,我曾尝试从此处添加 cronjob,但留在了命令的“根”部分,因此删除了它。

以上是关于PHP - cronjob 无法在 Ubuntu 18.04 上执行 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

无法让 cronjob 运行 node.js 文件

每分钟 Cronjob

带有 rsync 的 Ubuntu Cronjob

CronJob 没有运行

CronJob 没有运行

CronJob 没有运行