php cron job没有运行

时间:2014-11-14 09:51:02

标签: php linux cron crontab

root@xx:/var/www/test# which php
/usr/bin/php

root@xx:/var/www/test# ls -la
total 16
drwxrwxrwx 2 root root 4096 Nov 14 09:37 .
drwxrwxrwx 6 root root 4096 Nov 13 15:51 ..
-rwxrwxrwx 1 root root  153 Nov 14 09:35 test.php

这是我的test.php文件:

<?php
$my_file = 'file.txt';
$handle = fopen($my_file, 'w') or die('Cannot open file:  '.$my_file); //implicitly creates file

这是crontab -l

的输出
#this is ok
* * * * * touch /tmp/hello
#this only creates an empty php_result.log
* * * * * /usr/bin/php /var/www/test/test.php > /tmp/php_result.log

root@xx:/var/www/test# php -v
PHP 5.4.34-0+deb7u1 (cli) (built: Oct 20 2014 08:50:30) 

cron作业无法运行,问题出在php上。如果我手动运行该文件,一切正常。

php test.php

相关问题:Why is crontab not executing my PHP script?

1 个答案:

答案 0 :(得分:8)

您需要在脚本中使用完整路径。否则,cron将无法知道该文件的位置。

所以而不是

$my_file = 'file.txt';

使用

$my_file = '/path/to/file.txt';

可能您将file.txt存储在/的某个位置。

注意crontab在有限的环境中运行,因此它不能假设任何与路径有关的内容。这就是为什么你还必须提供php等的完整路径

来自Troubleshooting common issues with cron jobs

  

使用相对路径。如果您的cron作业正在执行某些脚本   好的,你必须确保只使用该脚本中的绝对路径。   例如,如果您的脚本位于/path/to/script.phpand   你试图在同一目录中打开一个名为file.php的文件,   你不能使用相对路径,如fopen(file.php)。该文件必须   从它的绝对路径调用,如下所示:fopen(/path/to/file.php)。   这是因为cron作业不一定从目录中运行   脚本所在的位置,因此必须专门调用所有路径。