Задание php cron не работает

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 

Связанный вопрос: Почему crontab не выполняет мой PHP-скрипт? ,

Вы должны использовать полные пути в своих сценариях. В противном случае cron не будет знать, где этот файл.

поэтому вместо

 $my_file = 'file.txt'; 

использование

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

Вероятно, вы получали file.txt где-то в / .

Обратите внимание, что crontab работает в ограниченной среде, поэтому он не может предполагать ничего относительно путей. Вот почему вы также должны предоставить полный путь php и т. Д.

От устранения общих проблем с заданиями cron :

Использование относительных путей. Если ваше задание cron выполняет какой-либо скрипт, вы должны обязательно использовать только абсолютные пути внутри этого скрипта. Например, если ваш скрипт находится в /path/to/script.phpand, вы пытаетесь открыть файл с именем file.php в том же каталоге, вы не можете использовать относительный путь, например fopen (file.php). Файл должен быть вызван из его абсолютного пути, например: fopen (/path/to/file.php). Это связано с тем, что задания cron не обязательно запускаются из каталога, в котором находится скрипт, поэтому все пути должны быть вызваны специально.