2

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

我做错什么了吗?请给点建议。谢谢。

科比

4

1 回答 1

2

您可能需要正确设置您的工作目录或使用绝对路径fopen()作为 cron 的默认工作目录是作业在其下运行的任何帐户的主目录,因此它可能是~/root~/yourusername(也请参阅此 stackexchange 问题)。你可以试试这个:

*/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

不同的是,如果失败,第二个将不会触发 PHP,cd这完全是我们想要的,因为如果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(). 它什么也没说。使用E_ALL或任何以有效设置结尾并且比 -1 更易于解释的东西。

于 2012-09-11T17:05:42.120 回答