如何在linode中使用crontab执行php文件

时间:2012-09-11 16:58:28

标签: php crontab linode

我正在尝试使用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。

我做错了吗?请给出一些建议。感谢。

科比

1 个答案:

答案 0 :(得分:2)

您可能需要正确设置工作目录或使用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失败,将无法启动file.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更自我解释。