Недавно клиенты начали жаловаться, что после перезагрузки сервера сайты работают лишь на протяжении минуты.
Было выяснено, что проблема в веб-сервере Nginx. Она может возникнуть после обновления ОС или смены версии веб-сервера.
Дело в том, что после перезагрузки, процесс Nginx самопроизвольно завершается.
Разберём проблему подробнее на основе CentOS 7.
Проверяем состояние Nginx:
service nginx status
В итоге получили статус "activating (start)". Что довольно странно, т.к. Nginx находится в процессе запуска, но что-то мешает ему запуститься.
Также получили из вывода предыдущей команды строку: "Can't open PID file /var/run/nginx.pid (yet?)".
В таких случаях необходимо проверить наличие файла, путь к нему и права доступа. Интересно, что в директории "/var/run/" файл находился и его можно было открыть из под пользователя, но раз в минуту файл удалялся.
Дело в том, что "/var/run/" - ссылка на директорию "/run/" (на это натолкнула строка "Too many levels of symbolic links" из вывода состояния веб-сервера).
Решение оказалось довольно простым.
1. Необходимо поменять директорию расположения данного файла с "/var/run/nginx.pid" на "/run/nginx.pid" в следующих конфигурационных файлах:
/etc/nginx/nginx.conf
/lib/systemd/system/nginx.service
2. После чего выполним команду, чтобы изменения в systemd вступили в силу:
systemctl daemon-reload
3. Перезагрузим Nginx:
service nginx restart
4. Вновь проверим состояние Nginx:
service nginx status
Вывод должен быть со следующей строкой: "Active: active (running)", что говорит нам о том, что веб-сервер запущен.
P.S.:
На PID файл могут ругаться так же fail2ban и mysqld. Процедура лечения аналогичная: необходимо в конфигурационных файлах (конфигурация программы и в systemd/) поменять директорию файла PID с "/var/run/" на просто "/run/".