Я управляю Symfony
сайт на сервере, используя Nginx
настроен с Let's Encrypt
. Все идет нормально, когда я запускаю сервер (всегда с sudo service nginx start
/ restart
)
Но каждые 3 месяца я замечаю, что сайт не работает. Когда я проверяю логи, всегда одно и то же:
2018/12/23 00:23:53 [notice] 22167#22167: signal process started
2018/12/23 00:23:53 [error] 22167#22167: open() "/run/nginx.pid" failed (2: No such file or directory)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/12/23 00:23:54 [emerg] 22194#22194: still could not bind()
2018/12/23 00:23:57 [alert] 22169#22169: unlink() "/run/nginx.pid" failed (2: No such file or directory)
Я знаю, что у других была такая же проблема, но при запуске. У меня что-то потом срабатывает ...
Также :
uname -a
Linux vps460780 4.9.0-7-amd64 #1 SMP Debian 4.9.110-3+deb9u2 (2018-08-13) x86_64 GNU/Linux
И при запуске nginx:
sudo netstat -tulpn | grep :443
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 6644/nginx: master
sudo netstat -tulpn | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7021/nginx: master
Я буду рад выложить любой другой файл конфигурации.
Ваш пост-хук Let's Encrypt должен перезагрузить nginx, а не начать сначала это, то есть:
--post-hook "systemctl reload nginx"
Чтобы выйти из текущей ситуации, завершите все существующие процессы nginx, а затем перезапустите nginx, то есть:
killall nginx
systemctl restart nginx
У меня была такая же проблема, и я обнаружил, что у меня запущено другое задание cron (как root), которое запускается certbot renew --post-hook="systemctl reload nginx"
. Я думаю, что раньше я прошел через учебник, чтобы установить его изначально, в котором мне было сказано добавить эту запись cron, но с тех пор все изменилось, и он устанавливает свою собственную.
Все еще нужно проверить, что это исправляет (подождите несколько месяцев, чтобы увидеть, произойдет ли это), но я подозреваю, что это все.