我有一些在浏览器中运行良好的 php 代码,但现在我想使用相同的代码并从 cron 脚本执行它,但我遇到了问题。
我尝试在 cron 上执行该命令 wget -O /dev/null http://www.mydomain.com/test.php
,但如果我在终端中尝试该命令,则会收到以下错误。
从 cron 运行 php 文件的正确命令是什么?我是否需要在 php 文件顶部添加额外的代码行?
我遇到的问题是
-bash-3.2$ wget -O /dev/null http://www.mydomain.com/test.php
--2012-04-08 15:59:41-- http://www.mydomain.com/test.php
Resolving www.mydomain.com... 46.***.***.1
Connecting to www.mydomain.com|46.***.***.1|:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
2012-04-08 15:59:41 ERROR 403: Forbidden.
我授予该文件 755 权限甚至 777 权限,但却看不出我做错了什么。
答案1
您的网络服务器未配置为允许访问您尝试下载的文件。您需要先解决该问题,然后再尝试从 cron 运行此下载。
首先,弄清楚您的网络服务器是如何配置的。如果您使用的是 Apache,您应该能够找到/etc/apache/httpd.conf
或/etc/apache2/httpd.conf
类似的。该文件应该会告诉您您的网络服务器是如何设置的。
其次,检查错误日志。它应该是这样的/var/log/apache/error.log
。该文件应该提供有关 wget 失败原因的其他信息。
调试该问题。一旦 wget 工作正常,您就可以尝试在 cron 中运行它。
您也可以尝试使用 curl 代替 wget。如下所示:
curl -s http://www.mydomain.com/test.php >/dev/null
应该也能正常工作。在这种情况下,我没有强烈的理由更喜欢 wget 或 curl。
答案2
可能没有理由通过 Web 服务器/客户端请求来运行它,这样做会增加不必要的复杂性。除非 PHP 脚本需要 Web 服务器环境(例如 $_SERVER 或 $_REQUEST ),否则最好直接运行它。
要直接从 cron 运行 PHP 脚本:
1 * * * * /usr/bin/php /path/to/your/php/script.php