我正在尝试使用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。
我做错了吗?请给出一些建议。感谢。
科比
答案 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更自我解释。