Запустить скрипт, если 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) и ищет указанный синтаксис и, если он недоступен, перезапускает демон. Вы могли бы взять это из заголовка сервера?

Другие вопросы по тегам