Pisarev_OS
@Pisarev_OS

Почему не отрабатывает 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 никакой ошибки не увидел.

Уже не знаю что думать :(
  • Вопрос задан
  • 221 просмотр
Пригласить эксперта
Ответы на вопрос 2
@Stqs
senior software developer
файл ф скрипте имеет не асболютный путь
поэтому при запуске скрипта кроном он все правильно пишет в файл
только одному крону известно где этот файл лежит
Ответ написан
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
На будущее: PHP при вызове из крона(и из консоли вообще) использует настройки, отличные от пхп настроенного "наружу" через Апач.
По этому:
1) Все пути должны быть абсолютные, как к скрипту, так и внутри него
2) Такие глобальные переменные как $_SERVER, $_GET, $_POST и прочие скорее всего будут пустыми.
3) Для отладки норм будет ">> somepath/log.txt 2>&1", но если скрипт не выполнится ничего естественно туда не запишется(не забываем что и здесь нужно указать полный абсолютный путь).
4) Ничего не мешает использовать вполне вменяемое мвц и объекты, достаточно сделать настроечный файл с инициализацией глобальных переменных "вручную" и, в некоторых случаях, подправить автозагрузку. Для такого у меня используется отдельный clibootstrap и cliController, в который можно только из консоли )
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы