Запустить скрипт, если nginx обнаружит ошибку?
Могу ли я настроить свой nginx для запуска какой-либо команды / скрипта оболочки при возникновении ошибки 5xx?
Мой spawn-fcgi часто дает сбой, у меня cronjob перезапускает его периодически, но я думаю, что лучшим решением было бы, если nginx не может достичь spawn-fcgi, а затем перезапустить его с помощью команды.
3 ответа
Вы можете запустить monit, выполнив это в конфиге:
check process spawn-fcgi with pidfile /var/run/spawn-fcgi.pid
start program = "/etc/init.d/spawn-fcgi start"
stop program = "/etc/init.d/spawn-fcgi stop"
if failed host localhost port 80 protocol HTTP request /test.php then restart
if 5 restarts within 5 cycles then timeout
depends on nginx
check process nginx with pidfile /var/run/nginx.pid
start program = "/etc/init.d/nginx start"
stop program = "/etc/init.d/nginx stop"
if failed host localhost port 80 protocol HTTP request /token.html then restart
if 5 restarts within 5 cycles then timeout
test.php - это просто php-файл, который выдает "OK"
Конечно, я полагаю, у вас уже есть скрипт инициализации spawn-fcgi и файл PID.
Нет, вы не можете без исправления исходного кода nginx, и это было бы неправильно, потому что nginx может столкнуться с ошибкой 5xx по многим причинам, а не только сбоем spawn-fcgi.
Просто запустите spawn-fcgi под супервизором процесса, например , инструментами демона или http://supervisord.org/, которые вы можете настроить для перезапуска spawn-fcgi в случае сбоя.
Вы можете написать скрипт, который подключается к вашему серверу через порт 80 (telnet/curl) и ищет указанный синтаксис и, если он недоступен, перезапускает демон. Вы могли бы взять это из заголовка сервера?