Я пытаюсь перезапустить PHP5-FPM периодически с помощью Крона, но не имею никакой удачи.
Я могу перезапустить вручную без проблем, с помощью service php5-fpm restart
или /usr/sbin/service php5-fpm restart
Однако, когда я использую ту же команду, включая использование полного пути к /usr/sbin/service
, ничего не происходит. cronjob действительно работает (как я вижу из системного журнала), но PHP5-FPM не перезапускает.
Соответствующая строка crontab моего пользователя root смотрит следующим образом:
* * * * * /usr/sbin/service php5-fpm restart
Я подтвердил с which service
то, что путь к сервису действительно /usr/sbin/service
.
Почему это не работает?
Единственное решение, которое я могу придумать, - это закомментировать следующие строки в файле /etc/init.d/php5-fpm:
# Don't run if we are running upstart
#if init_is_upstart; then
# exit 1
#fi
Поздний ответ партии
cron
запускает скрипты в очень легкой среде.
service
действительно проверяет, является ли сервис init upstart или /etc/init. скрипт d, и в этом случае выполнит команду
[ /sbin/ ] restart
(сим-ссылка на initctl), но он не работает, потому что путь /sbin
не является частью PATH
, когда cron выполняется и restart
дается без его абсолютного пути. На самом деле
можно было бы установить PATH для cron в начале crontab, но лучше установить нужную команду напрямую, так как
m h * * * /sbin/restart php5-fpm
Сегодня restart
- это симлинк. Завтра она может превратиться в скрипт, выполняющий другие действия перед вызовом initctl
.