Почему не отрабатывает php-скрипт по обращению из крона?
Столкнулся с какой-то мистикой, либо же пора в отпуск.
Есть script.php с содержимым: <?php file_put_contents('test.txt', 'TEST'); ?>
В кроне есть для него запись на исполнение каждую минуту: */1 * * * * php /www/site.ru/folder/script.php
Но скрипт не выполняется.
Что было проверно до того, как сойти с ума окончательно:
1) crontab -l показывает, что эта строка в кроне есть
2) лог крона показывает, что каждую минуту он успешно запрашивает этот скрипт
3) лог ">> /tmp/temp.txt 2>&1" никаких ошибок не показывает
4) при прямом обращение с браузера - скрипт отрабатывает успешно
5) при обращении с консоли "php /www/site.ru/folder/script.php" скрипт отрабатывает успешно
6) перезапускал крон, ребутал сервер (Centos)
7) у скрипта права пользователя root 0644, выставлялись также для теста 0777, не помогло
8) в задачах крона выше строкой над запуском этого скрипта есть строка на запуск другого вида "*/5 * * * * php /www/site.ru/folder/drugoe.php" - этот скрипт УСПЕШНО работает по крону
9) менял название файла, кидал скрипт в другие папки и т.д. - не помогло
10) менял интервал - не помогло
11) создавал вручную "test.txt"
12) создавал вручную "test.txt" и ставил на него права 0777
-----
13) !указал неверное имя файла скрипта - в логах /var/log/cron никакой ошибки не увидел.
1. /www/site.ru/folder/script.php - это полный путь к файлу?
2. Если команду переместить выше, ниже нее команды отрабатывают?
3. Если указать команду неправильно (например, несуществующий файл) - крон ругается?
Опа, вот тут уже интереснее - указал неверное имя файла - никакой ругани. Куда стоит копать?)
Никуда. cron php нашел? Нашел. С указанными параметрами запустил? Запустил. То, что параметры некорректны - его не колышет. А может и не нашел php вовсе - тоже не его проблема. Попробуйте указать полный путь до php
файл ф скрипте имеет не асболютный путь
поэтому при запуске скрипта кроном он все правильно пишет в файл
только одному крону известно где этот файл лежит
На будущее: PHP при вызове из крона(и из консоли вообще) использует настройки, отличные от пхп настроенного "наружу" через Апач.
По этому:
1) Все пути должны быть абсолютные, как к скрипту, так и внутри него
2) Такие глобальные переменные как $_SERVER, $_GET, $_POST и прочие скорее всего будут пустыми.
3) Для отладки норм будет ">> somepath/log.txt 2>&1", но если скрипт не выполнится ничего естественно туда не запишется(не забываем что и здесь нужно указать полный абсолютный путь).
4) Ничего не мешает использовать вполне вменяемое мвц и объекты, достаточно сделать настроечный файл с инициализацией глобальных переменных "вручную" и, в некоторых случаях, подправить автозагрузку. Для такого у меня используется отдельный clibootstrap и cliController, в который можно только из консоли )