CentOS 7 / systemd и сетевые интерфейсы

Комментариев нет
Как обычно, вначале ничто не предвещало беды.
Был раскатан свежий OVZ контейнер с CentOS 7 на борту, после чего обновлен до актуального состояния.
Добавлены пару сетевых интерфейсов и установлены Apache HTTP server и nginx, которые в свою очередь были развешены на IPv4 адреса.
Беда пришла откуда не ждали - после перезагрузки контейнера оба веб-сервера не поднялись с симптомами "Cannot assign requested address". При рестарте же руками - все поднималось без каких-либо ошибок.
Причины сего безобразия достаточно просты - network.target сообщал что он ок, но при этом на сетевые интерфейсы адреса еще не были развешены.
Лечение же этой беды до ужаса простое, надо просто подождать пока сеть поднимется до конца, а уже потом стартовать веб-сервера. Т.е. просто нужно повесить зависимость на немного другой таргет - network-online.target.
Итоговые сервисы для systemd выглядят так:
nginx.service:
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

httpd.service:
[Unit]
Description=The Apache HTTP Server
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target

С подобной проблемой сталкивались ребята из Parallels Odin Plesk, почитать про это можно у них на форуме или тех. центре

Комментариев нет :

Отправить комментарий