设置一个新的 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 文件,但似乎啥也没发生的主要内容,如果未能解决你的问题,请参考以下文章