Назад | Перейти на главную страницу

Как перезапустить PHP-FPM из cron?

Я пытаюсь периодически перезапускать 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


Заметка
use the symlink / sbin / перезапуск instead of calling directly initctl. The scripts/commands are here for a reason, basically to help the administrator with commands doing something specific, a simple syntax, and having a name easy to remember.

Cегодня restart это символическая ссылка. Завтра он может стать скриптом, выполняющим другие задачи перед вызовом initctl.

Единственное решение, которое я могу придумать, - это закомментировать следующие строки в файле /etc/init.d/php5-fpm:

# Don't run if we are running upstart
#if init_is_upstart; then
#    exit 1
#fi