我正在使用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)
答案 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()
答案 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
它有效!