Я пытаюсь периодически перезапускать PHP5-FPM с помощью Cron, но мне не повезло.
Я могу без проблем перезапустить вручную, используя 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
.
Почему это не работает?
Ты можешь использовать initctl
:
/sbin/initctl restart php5-fpm
Поздний ответ на вечеринку
cron
запускает сценарии в очень легкой среде.
service
действительно проверяет, является ли услуга инициализация выскочки или /etc/init.d скрипт, и в этом случае запустит
[ /sbin/ ] restart
команда (символическая ссылка на initctl), но это не удается, потому что /sbin
путь не является частью PATH
когда cron бежит и restart
дается без его абсолютного пути.
Вы действительно могли установить ПУТЬ для cron в начале crontab, но лучше задать нужную команду напрямую как
m h * * * /sbin/restart php5-fpm
Cегодня restart
это символическая ссылка. Завтра он может стать скриптом, выполняющим другие задачи перед вызовом initctl
.
Единственное решение, которое я могу придумать, - это закомментировать следующие строки в файле /etc/init.d/php5-fpm:
# Don't run if we are running upstart
#if init_is_upstart; then
# exit 1
#fi