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

Запуск сценария bash через cronjob для перезапуска службы

Прежде всего. Я ничего не знаю о сценариях bash. во-вторых, это очень большая проблема с моей стороны, и я не знаю, что делать.

В настоящее время у меня есть этот сайт. который был написан на php. и использует почтовый сервер и push-уведомления, которые запускаются как демон с использованием supervisord. Мой сайт работает хорошо, но время от времени мой почтовый сервер и push-уведомления не работают, потому что супервизор перестал работать; Мне пришлось перезапустить его вручную, чтобы он снова заработал.

Я думал, что мне сделать, чтобы у него автозапуск. потом возникла идея. для перезапуска службы с помощью сценария bash и заданий cron. Я знаю, это было глупо.

Я создал сценарий bash. просто простой.

#!/bin/bash
# A simple script 
echo " -- Restarting Supervisord --"
sudo service supervisor stop
sudo service supervisor start
echo "Done!" 

когда я запускаю это вручную через

./supervisord_restart.sh 

это был результат, который я получил

 -- Restarting Supervisord --
Job for supervisor.service failed. See "systemctl status supervisor.service" and "journalctl -xe" for details.
Done!

все так что я не знаю, правильно ли это в cronjob

0   0,12    *   *   *   /supervisord_restart.sh

кстати, если я правильно поступаю. Мне нужен мой сценарий bash, чтобы проверить, запущен ли suprevisord, а затем выполнить команды.

Предполагая, что ваш сервис имеет status , вы можете сделать что-нибудь столь же простое, как в задании cron:

0 0,12 * * * service whatever status >/dev/null || service whatever restart

Таким образом, вы сначала запускаете проверку состояния, отбрасываете подробный вывод, а затем проверяете, что код выхода не равен 0 (что было бы хорошо), и в этом случае - перезапуск.

Действительно, с такой легкой проверкой вы можете чаще запускать задание cron.

Если вы получаете сообщение об ошибке «команда не найдена» из задания cron, это может быть не в PATH по умолчанию, поэтому добавьте вызовы с помощью / usr / sbin / или / sbin / или где бы он ни был в вашей системе.

Прежде всего: вы должны исследовать "настоящий" проблема с супервизором вместо перезапуска службы каждую ночь.

При этом попробуйте использовать /etc/init.d/supervisor stop / start или restart. Часто cron имеет проблемы с использованием service. Вы также должны создать cron под управлением супервизора пользователя или как root через sudo crontab -e. Также всегда используйте полные пути в cron, поэтому не /supervisord_restart.sh но /usr/local/bin/supervisord_restart.sh или похожие.

(И: какой дистрибутив Linux вы используете)