Предыстория: писал эту статью, обнаружив проблему с NGINX, который выдавал «Can’t open PID file /var/run/nginx.pid (yet?)» , но оказалось, что ещё куча пакетов ругается на «Too many levels of symbolic links«. К примеру, mysqld и fail2ban.
Обновил Centos с версии 7.6 до 7.7 на рабочем сервере с сайтами и получил пару незабываемых часов острых ощущений. Обновление прошло успешно, но после перезагрузки NGINX работал ровно 1 минуту и падал. При падении NGINX отключались все сайты на сервере. Оказалось, решение довольно простое, но на поиски ушло пара часов.
Сначала определил, что падение происходит именно из-за NGINX. Для этого пришлось пару раз перезагрузить сервер и убедиться, что работа сайтов длится 1 минуту. После чего всё становится недоступным. Процесс NGINX самопроизвольно просто завершался. Перевёл NGINX в режим error_log … debug, но и тут ничего странного не увидел. Тогда проверил состояние NGINX командой:
service nginx status
На что мне выдало:
Active: activating (start) since Ср 2019-11-06 10:29:02 MSK; 22s ago
….
ноя 06 10:29:01 vps60156 systemd[1]: Starting nginx — high performance web server…
ноя 06 10:29:01 vps60156 nginx[26837]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
ноя 06 10:29:01 vps60156 nginx[26837]: nginx: configuration file /etc/nginx/nginx.conf test is successful
ноя 06 10:23:01 vps60156 systemd[1]: Can’t open PID file /var/run/nginx.pid (yet?) after start: Too many levels of symbolic links
Первая строчка «activating (start)» довольно странная, потому что она говорит о том, что программа находится на запуске, но ещё не запустилось. Что-то мешает ей. Последняя строчка «Can’t open PID file /var/run/nginx.pid (yet?)» сигнализировала о том, что PID файла процесса NGINX куда-то девается. При этом я вижу его в папке /var/run/, могу открыть из-под пользователя, от которого запускается NGINX. Но почему-то файл удаляется раз в минуту.
Решил перенести место сохранения PID файла. На мысль натолкнула фраза «Too many levels of symbolic links«, ведь /var/run/ — это не папка, а ссылка на папку /run/. Поэтому изменил место PID файла NGINX с /var/run/nginx.pid на /run/nginx.pid в файлах /etc/nginx/nginx.conf и /lib/systemd/system/nginx.service. После чего выполнил команду, чтобы изменения в systemd вступили в силу:
systemctl daemon-reload
И перезагрузил NGINX:
service nginx restart
Всё запустилось отлично. Проверил, вызвав статус:
service nginx status
На что мне выдало:
Active: active (running) since Ср 2019-11-06 10:25:02 MSK; 8s ago
P.S.
Обнаружил, что не только NGINX начал капризничать по PID но и fail2ban. То есть слишком долго грузится и выдаёт «Can’t open PID file /var/run/fail2ban/fail2ban.pid (yet?)». Лечится аналогичным способом — изменение в двух файлах (конфигурация программы и в systemd/) путей с /var/run/ на просто /run/
P.P.S.
Аналогично с базой данных mysqld