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

标签 php cron 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。

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

科比

最佳答案

您可能需要正确设置工作目录或使用 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/

相关文章:

linux - shell 脚本手动运行但不在 crontab 中运行

memory - 在 Linode 512 VPS 上运行 MongoDB 的可行性?

php - 为单个查询显示多个记录的问题

php - 使用 pubnub 访问管理器通过 php 发布的问题

python - Anacron - Python 子进程不执行 gdrive 命令

混帐推送 "The remote end hung up unexpectedly "

ruby-on-rails - 理解和创建证书请求和私钥

php - 当执行 "php artisan migrate"时,我得到 : Base table or view already exists: 1050 Table 'users' . (我正在使用 PHPSTORM 2018.3.4)

php - 获取id为0,10,20,30等的mysql记录

azure - WebJob Crontab 计划在整点运行,此后每 15 分钟运行一次