PHP无法使用CRON

时间:2016-01-21 11:00:19

标签: php cron

我正在使用crontab调用php脚本。

在这个脚本中有

error_log('test');

从http或直接命令行执行脚本时,如

php -f script.php

一切都很好,我的错误是记录。

但是当从cron调用它时它不起作用。

这是我的cron

* * * * * -u www-data /full_path_to/php -f /full_path_to/script.php

以下是我尝试的内容:

  • 带参数的error_log:

    error_log('test', 3, '/full_path_to/error.log');
    
  • 更改错误报告:

    error_reporting(E_ALL);
    ini_set('display_errors','On');
    ini_set('error_log', '/full_path_to/error.log');
    
  • cron以>结尾的电话/full_path_to/error.log 2>& 1(不知道是否有用)

对于http,error_log路径是从htaccess设置的。 我迷失了php cli ......

我可以看到cron执行每分钟都在工作(syslog),所以它应该是一个PHP配置问题?

如果你能提供帮助,非常感谢。

编辑:Cron以“-u www-data”

执行

这是我在syslog中看到的电话:

CRON[13921]: (www-data) CMD (-u www-data /usr/bin/php -f /fullpath/script.php > /fullpath/error.log 2>&1)

3 个答案:

答案 0 :(得分:0)

您必须知道用户特定 crontabs和系统范围 crontab。

以用户foo登录并在控制台中键入crontab -e时,您可以编辑自己的用户特定crontab。所有已定义的cron任务将以用户foo执行。用户root甚至都是如此。通过这种方式AFAIK,您只需就无法更改用户,在该用户下运行cron任务。

文件/etc/crontab完全不同。这是系统范围的crontab。在该文件中,您可以更改cron任务的用户,如下所示:

* * * * * www-data /full_path_to/php -f /full_path_to/script.php

答案 1 :(得分:0)

我实际上有两个问题:

1)我的cron是用php.ini为php-cli执行的。我使用-c标志来加载好的。

2)我依靠$ _SERVER来使用cli-mode中不存在的变量来声明重要的常量。现在,如果未设置这些变量,我使用getopt()

解析commande行变量

答案 2 :(得分:0)

我遇到了同样的问题但是在阅读了php的手册条目之后能够修复它。

最初我的设置如下:

/usr/bin/php -f /path/to/php/script.php -c 1426 >> /tmp/script.php.log 2>&1

我可以通过将行更改为:

来修复它
/usr/bin/php -f /path/to/php/script.php -- -c 1426 >> /tmp/script.php.log 2>&1

根据手动输入,语法为:

php [options] [ -f ] file [[--] args...]

此外,

args...        Arguments passed to script. Use '--' args when first argument starts with '-' or script is read from stdin

顺便说一句,我的cron命令变为:

/usr/bin/php -f /path/to/php/script.php -- -c 1426 >> /tmp/script.php.log 2>&1

它有效!