设置一个新的 Cron 来运行一个 PHP 文件,但似乎啥也没发生

Posted

技术标签:

【中文标题】设置一个新的 Cron 来运行一个 PHP 文件,但似乎啥也没发生【英文标题】:Setting up a new Cron to run a PHP file and nothing seems to happen设置一个新的 Cron 来运行一个 PHP 文件,但似乎什么也没发生 【发布时间】:2015-03-06 11:26:26 【问题描述】:

我相信这对某人来说很容易回答。

我有一个由我之前的其他人设置的专用服务器,我需要设置一个新的 cron 作业。 cron 将运行一个 php 文件。

到目前为止,我已经完成了以下工作:

sudo crontab -u root -e 编辑 crontab。添加代码行之前的最后一行是 PHP 脚本 cron,因此我以它为例并将文件路径更改为我的新文件。请参阅下面的两个示例,我也将 cron 更改为每分钟运行一次:

老例子

 */5 * * * * /usr/bin/php /home/emailer/htdocs/admin/cron.php

我添加的新代码

 */1 * * * * /usr/bin/php /home/non-cms-websites/crons/cron-notifications/index.php

我添加的脚本只是使用 PHP Mailer 向我的电子邮件帐户发送一封测试电子邮件,目前只是一个基本脚本,但当我开始工作时会有更多功能。

我是否需要重新启动/重新加载 cron 以便我添加的新 cron 运行?

服务器正在运行 Linux Ubuntu 10.04 64 位,如果这有影响的话。

非常感谢您的帮助,谢谢。

【问题讨论】:

跳过以root 运行类似这样的想法,它应该可以正常工作 - 你确定你的 cron 不工作吗?或者你有错误的 php 文件并且你没有收到电子邮件的原因是在 php 脚本中而不是 cron 我现在可以直接通过浏览器运行 PHP 文件,并且电子邮件发送正常,所以我不相信它的文件。如果可以调试,似乎无法解决。感谢您的意见。 尝试在您的终端中/usr/bin/php /home/non-cms-websites/crons/cron-notifications/index.php 并查找错误 您的 PHP 脚本是否依赖于任何环境变量才能正常工作?从 cron 运行时可能不会设置它们。 【参考方案1】:

检查 index.php 文件的路径是否正确。还可以运行 crontab -l 命令查看 cron 列表。

【讨论】:

是的,我再次检查了它,它的路径似乎很好。我只是不明白如何调试它来尝试看看出了什么问题。 你运行 crontab -l 运行“sudo crontab -u root -l”,我可以看到我创建的新 cron 作业在列表中,但没有其他信息。 用php代替/usr/bin/php然后看看。 Needhi 仍然没有运气,我使用了“/usr/bin/php”,因为之前设置服务器的开发人员已经运行了一个这样的 PHP cron,所以这样做是有意义的。我真的不知道还能做什么。关于任何调试技术的任何想法?【参考方案2】:

如果您使用 Vixie Cron,我想不需要重新启动。可能是 php 文件路径或脚本有问题。请参阅下面的链接,它可能会有所帮助。我引用了一小段摘录。

http://www.unixgeeks.org/security/newbie/unix/cron-1.html

“有很多守护进程(例如 httpd 和 syslogd),它们需要重新启动 更改配置文件后,程序有机会 重新加载它们。 Vixie Cron 会自动重新加载文件后 已使用 crontab 命令进行了编辑。一些 cron 版本重新加载 每分钟都有文件,有些需要重新启动,但 Vixie Cron 只是加载 文件是否已更改。”

【讨论】:

【参考方案3】:

根据这个链接需要重启:http://wiki.qnap.com/wiki/Add_items_to_crontab

根据此链接,您无需重新启动,但在某些 cmets 上似乎可能会因 linux 发行版而异。 Restarting cron after changing crontab file?

重启命令可能会因 Linux 发行版而异。这适用于我的 Debian 机器,也应该适用于 Ubuntu。

sudo /etc/init.d/cron restart

sudo service cron restart

【讨论】:

如果他使用crontab -e,则无需重新启动【参考方案4】:

您提到您已经检查过它,但不清楚您是指 php 的路径还是实际在 cli 上运行它 - 正如您所说的那样,它可以通过浏览器工作,并且 .php 脚本的路径是正确的。健全性检查 php 可执行文件应该在哪里

/usr/bin/php -v

虽然我运行完全不同版本的所有内容,但在 2020 年,我的 php 执行路径是 /bin/php。

而且没有权限的有趣业务。

确保您已安装 php-cli:

dpkg --get-selections | grep -i php

检查 cron 日志(通常是 /var/log/cron ) 检查 PHP 错误。确保 php.ini 实际上有 cli 的错误日志: 例如

; Log errors to specified file. PHP's default behavior is to leave this value ; http://php.net/error-log error_log = /var/log/httpd/php_errors.log ; Log errors to syslog. ;error_log = syslog

或者更简单,临时启用要调试的脚本的错误显示(假设它尚未明确禁用)。你之后的脚本顶部

error_reporting(E_ALL & ~E_NOTICE); ini_set('display_errors', 1);

使用您在 cron 中配置的命令字符串直接从 cli 运行它(再次 - 完整性检查!)。让 cron 做它的事情,然后检查日志。

cron 日志至少会告诉你它是否被调用。 PHP 错误日志(或配置中的系统日志)将为您提供预期的基础知识,但也提供一些容易遗漏的错误,例如超出内存限制或配置的 max_execution_time。

通过网络服务器运行并不意味着在 cli 上一切正常。

【讨论】:

以上是关于设置一个新的 Cron 来运行一个 PHP 文件,但似乎啥也没发生的主要内容,如果未能解决你的问题,请参考以下文章

在 cpanel 中使用 cron 作业运行 php 脚本

在 Windows 中使用 php 设置 cron 作业

cPanel cron 作业,没有指定输入文件?

cron 作业在 cpanel 中无法正常工作

如何确保 cron 作业能够运行?

Cron作业执行php文件