我正在尝试使用 crontab 执行 linode 上托管的 php 文件。
这是我到目前为止所做的事情。
我添加了一行:
/etc/crontab ('crontab -e' is used too)
我想每 2 分钟执行一次这个文件。
*/2 * * * * /usr/bin/php /srv/www/path/to/my/php/file.php
这是我的 php 文件中用于测试的代码
// Set error reporting
error_reporting(-1);
ini_set('display_errors', 'On');
ini_set('html_errors', 'On');
ini_set('allow_url_fopen', 'On');
$fh = fopen('gallery.xml', 'w+');
fwrite($fh, $_SERVER['REQUEST_TIME']);
fclose($fh);
php文件和xml文件都是777权限。 如果我直接在浏览器中打开php文件,xml文件就可以记录变量。 但是当我使用 crontab 时没有任何反应。看来这对我不起作用。
我使用的是 Linode 和 debian 6。
我做错了什么吗?请给一些建议。谢谢。
科比
最佳答案
您可能需要正确设置工作目录或使用 fopen()
的绝对路径,因为 cron 的默认工作目录是运行作业的任何帐户的主目录,因此它可能是 ~/root
或 ~/yourusername
(另请参阅 this stackexchange question)。你可以试试这个:
*/2 * * * * ( cd /srv/www/path/to/my/php/ ; /usr/bin/php -q file.php )
或者这个:
*/2 * * * * cd /srv/www/path/to/my/php/ && /usr/bin/php -q file.php
不同之处在于,如果 cd
失败,第二个不会触发 PHP,这完全是我们想要的,因为如果 cd
失败,将不会有 文件。 php
启动。
您还可以设置可执行位(即chmod a+x file.php
)并将其作为第一行添加到脚本中:
# /usr/bin/php -q
这样您就可以像任何其他应用程序或脚本一样调用您的脚本(即./file.php
)。那么你的 crontab 条目将如下所示:
*/2 * * * * cd /srv/www/path/to/my/php/ && ./file.php
并且不要在 error_reporting()
中使用神秘的“-1”。它什么也没说。使用 E_ALL
或任何以有效设置结尾且比 -1 更不言自明的内容。
关于php - 如何在linode中使用crontab执行php文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12374502/