我相信这对某人来说很容易回答。
我有一个由我之前的其他人设置的专用服务器,我需要设置一个新的 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位,如果这有什么不同的话。
任何帮助非常感谢,谢谢。
检查索引的路径.php文件是否正确。同时运行 crontab -l 命令以查看 crons 列表。
如果您使用的是Vixie Cron,则无需重新启动。 可能PHP文件路径或脚本有一些问题。请参阅下面的链接,它可能会有所帮助。我引用了一小段摘录。
http://www.unixgeeks.org/security/newbie/unix/cron-1.html
"对于大量的守护进程(例如httpd和syslogd),它们需要重新启动。更改配置文件后,程序有机会以重新加载它们。Vixie Cron 将在文件后自动重新加载已使用 crontab 命令进行编辑。某些 cron 版本会重新加载文件每分钟一次,有些需要重新启动,但 Vixie Cron 只是加载文件(如果已更改)。
根据此链接,您需要重新启动: http://wiki.qnap.com/wiki/Add_items_to_crontab
根据此链接,您不需要重新启动,但在某些评论中,它似乎可能会因 linux 发行版而异。更改 crontab 文件后重新启动 cron?
重新启动的命令可能因 linux 发行版而异。这适用于我的 Debian 机器,也应该适用于 Ubuntu。
sudo /etc/init.d/cron restart
或
sudo service cron restart
你提到你已经检查过它,但不清楚你的意思是 php 的路径还是实际在 cli 上运行它 - 正如你所说,它可以通过浏览器工作,并且脚本.php路径是正确的。健全性检查 php 可执行文件
在哪里应该是在哪里 /usr/bin/php -v
虽然我运行的所有内容完全不同的版本,但在 2020 年,我的 php exec 路径是/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 错误日志(或根据配置的系统日志)将为您提供预期的基础知识,但也有一些容易错过的错误,例如超出 mem 限制或配置max_execution_time。
通过网络服务器运行并不意味着它在 cli 上一切都很好。