Re: Не запустился nginx при старте OpnenVZ контейнера
On 12.01.2016 20:11, Konstantin Pavlov wrote: Насколько я помню как работали openvz/vzctl (последний раз доводилось их использовать во времена, когда RHEL7 еще не было), конфигурирование и поднятие сети в контейнере там было сделано при помощи третьих (относительно ОС в контейнере) скриптов, запускаемых из хостовой системы независимо от init-системы в контейнере и последующим аналогом service network restart. Если это до сих пор так, то, получается, systemd запускает сеть без настроек, потом vzctl их добавляет и перезапускает сеть. Очевидно, что в таком режиме демон, желающий забиндиться на определенный адрес, работать не сможет - и дело не в нем и не в systemd. Константин, спасибо за помощь! Теперь понятно в чем проблема. -- Best regards, Gena ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не запустился nginx при старте OpnenVZ контейнера
не? If you write a server: if you want to listen on other, explicitly configured addresses, consider using the IP_FREEBIND sockopt functionality of the Linux kernel. This allows your code to bind to an address even if it is not actually (yet or ever) configured locally. This also makes your code robust towards network configuration changes. 12 января 2016 г., 19:41 пользователь Gena Makhomed написал: > On 12.01.2016 19:22, Vasiliy P. Melnik wrote: > > правильный ответ - не использовать NetworkManager >> > > NetworkManager не используется. > > вопрос явно в том, что интерфейса просто нет в момент старта нгинкса >> > > IP нет. я даже патч предлагал для решения этой проблемы nginx+systemd: > > http://mailman.nginx.org/pipermail/nginx-devel/2015-December/007730.html > > на мой взгляд, проблема в systemd в первую очередь, > и во-вторую очередь в unit-файле nginx. В документе > http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ > подробно написано как работает network.target и как надо было бы > переписать nginx чтобы он стал совместимым с systemd и network.target > > -- > Best regards, > Gena > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не запустился nginx при старте OpnenVZ контейнера
On 12/01/2016 16:15, Gena Makhomed wrote: > On 28.12.2015 14:45, Konstantin Pavlov wrote: > >>> Не запустился nginx при старте OpenVZ контейнера. >>> nginx: [emerg] bind() to 172.23.23.161:80 failed (99: Cannot assign >>> requested address) > >> Попробуйте костыль из >> http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/#cutthecraphowdoimakenetwork.targetworkforme >> >> ? > > Костыль не работает: > # cat /etc/redhat-release > CentOS Linux release 7.2.1511 (Core) > # systemctl enable NetworkManager-wait-online.service > Failed to execute operation: No such file or directory > # systemctl enable systemd-networkd-wait-online.service > Failed to execute operation: No such file or directory Контейнер, видимо, не содержит ни networkmanager, ни networkd. Насколько я помню как работали openvz/vzctl (последний раз доводилось их использовать во времена, когда RHEL7 еще не было), конфигурирование и поднятие сети в контейнере там было сделано при помощи третьих (относительно ОС в контейнере) скриптов, запускаемых из хостовой системы независимо от init-системы в контейнере и последующим аналогом service network restart. Если это до сих пор так, то, получается, systemd запускает сеть без настроек, потом vzctl их добавляет и перезапускает сеть. Очевидно, что в таком режиме демон, желающий забиндиться на определенный адрес, работать не сможет - и дело не в нем и не в systemd. > этот костыль не работает. но помог другой костыль - > везде прописать "listen 443" и "listen 80" вместо явного указания IP. > > это баг или фича? > > если фича - то может быть тогда имеет смысл поправить > документацию, что на CentOS 7.2 где systemd нельзя в директиве > listen указывать IP, потому что в этом случае nginx не запустится. Мы не наблюдаем подобной проблемы на серверах (пусть даже виртуализированных средствами KVM/Xen) с CentOS 7.2, в т.ч. с DHCP. > или какой тут правильный вариант действий для пользователей nginx ? В конкретном случае я вижу три варианта (по нарастающей сложности): - sysctl net.ipv4.ip_nonlocal_bind=1 - listen по wildcard, как вы и сделали - использовать отдельный nginx.service, как в вашем патче. -- Konstantin Pavlov ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не запустился nginx при старте OpnenVZ контейнера
Hello! On Tue, Jan 12, 2016 at 07:41:43PM +0200, Gena Makhomed wrote: > On 12.01.2016 19:22, Vasiliy P. Melnik wrote: > > >правильный ответ - не использовать NetworkManager > > NetworkManager не используется. > > >вопрос явно в том, что интерфейса просто нет в момент старта нгинкса > > IP нет. я даже патч предлагал для решения этой проблемы nginx+systemd: > > http://mailman.nginx.org/pipermail/nginx-devel/2015-December/007730.html > > на мой взгляд, проблема в systemd в первую очередь, > и во-вторую очередь в unit-файле nginx. В документе > http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ > подробно написано как работает network.target и как надо было бы > переписать nginx чтобы он стал совместимым с systemd и network.target Я не большой специалист по systemd, но лично мне представляется, что проблема в первую очередь в том, что unit-файл - один. А nginx в зависимости от настроек - может иметь очень разные требования для запуска. Вплоть до требования наличия трезвого администратора за консолью, способного вспомнить пароль от ключа. -- Maxim Dounin http://nginx.org/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не запустился nginx при старте OpnenVZ контейнера
On 12.01.2016 19:22, Vasiliy P. Melnik wrote: правильный ответ - не использовать NetworkManager NetworkManager не используется. вопрос явно в том, что интерфейса просто нет в момент старта нгинкса IP нет. я даже патч предлагал для решения этой проблемы nginx+systemd: http://mailman.nginx.org/pipermail/nginx-devel/2015-December/007730.html на мой взгляд, проблема в systemd в первую очередь, и во-вторую очередь в unit-файле nginx. В документе http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ подробно написано как работает network.target и как надо было бы переписать nginx чтобы он стал совместимым с systemd и network.target -- Best regards, Gena ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не запустился nginx при старте OpnenVZ контейнера
правильный ответ - не использовать NetworkManager, вопрос явно в том, что интерфейса просто нет в момент старта нгинкса 12 января 2016 г., 15:15 пользователь Gena Makhomed написал: > On 28.12.2015 14:45, Konstantin Pavlov wrote: > > Не запустился nginx при старте OpenVZ контейнера. >>> nginx: [emerg] bind() to 172.23.23.161:80 failed (99: Cannot assign >>> requested address) >>> >> > Попробуйте костыль из >> >> http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/#cutthecraphowdoimakenetwork.targetworkforme >> ? >> > > этот костыль не работает. но помог другой костыль - > везде прописать "listen 443" и "listen 80" вместо явного указания IP. > > это баг или фича? > > если фича - то может быть тогда имеет смысл поправить > документацию, что на CentOS 7.2 где systemd нельзя в директиве > listen указывать IP, потому что в этом случае nginx не запустится. > > или какой тут правильный вариант действий для пользователей nginx ? > > -- > Best regards, > Gena > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не запустился nginx при старте OpnenVZ контейнера
On 28.12.2015 14:45, Konstantin Pavlov wrote: Не запустился nginx при старте OpenVZ контейнера. nginx: [emerg] bind() to 172.23.23.161:80 failed (99: Cannot assign requested address) Попробуйте костыль из http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/#cutthecraphowdoimakenetwork.targetworkforme ? этот костыль не работает. но помог другой костыль - везде прописать "listen 443" и "listen 80" вместо явного указания IP. это баг или фича? если фича - то может быть тогда имеет смысл поправить документацию, что на CentOS 7.2 где systemd нельзя в директиве listen указывать IP, потому что в этом случае nginx не запустится. или какой тут правильный вариант действий для пользователей nginx ? -- Best regards, Gena ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не запустился nginx при старте OpnenVZ контейнера
On 28.12.2015 14:45, Konstantin Pavlov wrote: Попробуйте костыль из http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/#cutthecraphowdoimakenetwork.targetworkforme ? Костыль не работает: # cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) # systemctl enable NetworkManager-wait-online.service Failed to execute operation: No such file or directory # systemctl enable systemd-networkd-wait-online.service Failed to execute operation: No such file or directory Есть патч: http://mailman.nginx.org/pipermail/nginx-devel/2015-December/007730.html -- Best regards, Gena ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не запустился nginx при старте OpnenVZ контейнера
On 28.12.2015 14:45, Konstantin Pavlov wrote: Dec 24 18:55:15 hroniky-com systemd: Starting nginx - high performance web server... Dec 24 18:55:18 hroniky-com systemd: Starting System Logging Service... Dec 24 18:55:18 hroniky-com systemd: Starting LSB: Bring up/down networking... Dec 24 18:55:18 hroniky-com nginx: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok Dec 24 18:55:18 hroniky-com nginx: nginx: [emerg] bind() to 172.23.23.161:80 failed (99: Cannot assign requested address) Попробуйте костыль из http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/#cutthecraphowdoimakenetwork.targetworkforme ? В документе http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ есть рекомендация использовать network-online.target тогда проблем с nginx не будет - сеть будет поднята: $ diff -u nginx.service.old nginx.service --- nginx.service.old 2015-12-09 17:04:13.0 +0200 +++ nginx.service 2015-12-28 15:06:43.024818287 +0200 @@ -1,8 +1,8 @@ [Unit] Description=nginx - high performance web server Documentation=http://nginx.org/en/docs/ -After=network.target remote-fs.target nss-lookup.target - +After=network-online.target remote-fs.target nss-lookup.target + [Service] Type=forking PIDFile=/run/nginx.pid @@ -11,6 +11,7 @@ ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true - + [Install] WantedBy=multi-user.target + И это лучше, чем корежить систему кривыми настройками systemctl enable NetworkManager-wait-online.service systemctl enable systemd-networkd-wait-online.service -- Best regards, Gena ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не запустился nginx при старте OpnenVZ контейнера
Hi, On 25/12/2015 01:03, Gena Makhomed wrote: > Здравствуйте! > > Не запустился nginx при старте OpenVZ контейнера. > > # cat /etc/redhat-release > CentOS Linux release 7.2.1511 (Core) > > Dec 24 18:55:15 hroniky-com systemd: Starting nginx - high performance > web server... > Dec 24 18:55:18 hroniky-com systemd: Starting System Logging Service... > Dec 24 18:55:18 hroniky-com systemd: Starting LSB: Bring up/down > networking... > Dec 24 18:55:18 hroniky-com nginx: nginx: the configuration file > /etc/nginx/nginx.conf syntax is ok > Dec 24 18:55:18 hroniky-com nginx: nginx: [emerg] bind() to > 172.23.23.161:80 failed (99: Cannot assign requested address) Попробуйте костыль из http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/#cutthecraphowdoimakenetwork.targetworkforme ? -- Konstantin Pavlov ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не запустился nginx при старте OpnenVZ контейнера
On 25.12.2015 15:25, denis wrote: Проблема в том, что nginx запускается еще до того, как поднята сеть такой глюк у меня наблюдается только в контейнерах OpenVZ внутри которых используется CentOS 7.2 - возможно причина проблем в OpenVZ или в комбинации OpenVZ + CentOS 7.2 на CentOS 7.2 без OpenVZ - кто-нибудь такие глюки наблюдает? как костыль - выставить net.ipv4.ip_nonlocal_bind=1 пока буду пробовать писать "listen 80;" вместо явного указания IP. -- Best regards, Gena ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не запустился nginx при старте OpnenVZ контейнера
On 25.12.2015 3:03, Gena Makhomed wrote: Проблема в том, что nginx запускается еще до того, как поднята сеть: Dec 24 18:55:15 hroniky-com systemd: Starting nginx - high performance web server... Dec 24 18:55:18 hroniky-com systemd: Starting System Logging Service... Dec 24 18:55:18 hroniky-com systemd: Starting LSB: Bring up/down networking... Dec 24 18:55:18 hroniky-com nginx: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok Dec 24 18:55:18 hroniky-com nginx: nginx: [emerg] bind() to 172.23.23.161:80 failed (99: Cannot assign requested address) Dec 24 18:55:18 hroniky-com nginx: nginx: configuration file /etc/nginx/nginx.conf test failed Похоже, что запускается именно ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf А вот до ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf По условию After=network.target remote-fs.target nss-lookup.target дело просто не доходит, поскольку тест конфига завершился с ошибкой. Имхо было бы правильным не считать nginx: [emerg] bind() to 172.23.23.161:80 failed (99: Cannot assign requested address) Ошибкой тестирования конфига: nginx: configuration file /etc/nginx/nginx.conf test failed Потому что при запуске nginx через systemd конфиг тестируется тогда, когда еще сеть не поднята, согласно условий unit-файла nginx.service Точнее, может быть добавить параметр командной строки -w: -q: suppress non-error messages during configuration testing -w: treat all errors as warnings -w будет всегда завершать выполнение nginx -t с нулевым кодом возврата. и только для systemd использовать именно этот новый параметр: ExecStartPre=/usr/sbin/nginx -t -w -c /etc/nginx/nginx.conf ? Или как лучше можно решить эту проблему с nginx/systemd race condition? -- Best regards, Gena ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не запустился nginx при старте OpnenVZ контейнера
25.12.2015 4:03, Gena Makhomed пишет: On 25.12.2015 0:51, Alex Vorona wrote: Посмотрите когда в системе после запуска "Starting LSB: Bring up/down networking..." появляется IP на интерфейсе на самом деле. Проблема в том, что nginx запускается еще до того, как поднята сеть: как костыль - выставить net.ipv4.ip_nonlocal_bind=1 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не запустился nginx при старте OpnenVZ контейнера
On 25.12.2015 0:51, Alex Vorona wrote: Посмотрите когда в системе после запуска "Starting LSB: Bring up/down networking..." появляется IP на интерфейсе на самом деле. Проблема в том, что nginx запускается еще до того, как поднята сеть: Dec 24 18:55:15 hroniky-com systemd: Starting nginx - high performance web server... Dec 24 18:55:18 hroniky-com systemd: Starting System Logging Service... Dec 24 18:55:18 hroniky-com systemd: Starting LSB: Bring up/down networking... Dec 24 18:55:18 hroniky-com nginx: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok Dec 24 18:55:18 hroniky-com nginx: nginx: [emerg] bind() to 172.23.23.161:80 failed (99: Cannot assign requested address) Dec 24 18:55:18 hroniky-com nginx: nginx: configuration file /etc/nginx/nginx.conf test failed Похоже, что запускается именно ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf А вот до ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf По условию After=network.target remote-fs.target nss-lookup.target дело просто не доходит, поскольку тест конфига завершился с ошибкой. Имхо было бы правильным не считать nginx: [emerg] bind() to 172.23.23.161:80 failed (99: Cannot assign requested address) Ошибкой тестирования конфига: nginx: configuration file /etc/nginx/nginx.conf test failed Потому что при запуске nginx через systemd конфиг тестируется тогда, когда еще сеть не поднята, согласно условий unit-файла nginx.service -- Best regards, Gena ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Не запустился nginx при старте OpnenVZ контейнера
С IPv6 попадался https://bugzilla.redhat.com/show_bug.cgi?id=1243958, но там хотя бы понятно почему на IP еще нельзя забиндиться - init-скрипт IP добавил и вышел, но IP еще не успевает появиться на интерфейсе из-за IPv6 DAD. Посмотрите когда в системе после запуска "Starting LSB: Bring up/down networking..." появляется IP на интерфейсе на самом деле. ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Не запустился nginx при старте OpnenVZ контейнера
Здравствуйте! Не запустился nginx при старте OpenVZ контейнера. Из-за "Starting LSB: Bring up/down networking..." Возможно этот баг не специфичен для OpenVZ. Как решить проблему? Пакет с официального сайта: # rpm -q nginx nginx-1.9.9-1.el7.ngx.x86_64 # cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) # uname -a Linux hroniky-com 2.6.32-042stab112.15 #1 SMP Tue Oct 20 17:22:56 MSK 2015 x86_64 x86_64 x86_64 GNU/Linux # cat /var/log/messages Dec 24 18:55:14 hroniky-com systemd: Starting Sockets. Dec 24 18:55:14 hroniky-com systemd: Reached target Basic System. Dec 24 18:55:14 hroniky-com systemd: Starting Basic System. Dec 24 18:55:14 hroniky-com systemd: Started D-Bus System Message Bus. Dec 24 18:55:14 hroniky-com systemd: Starting D-Bus System Message Bus... Dec 24 18:55:14 hroniky-com systemd: Starting Permit User Sessions... Dec 24 18:55:14 hroniky-com systemd: Starting Postfix Mail Transport Agent... Dec 24 18:55:14 hroniky-com systemd: Started OpenSSH Server Key Generation. Dec 24 18:55:14 hroniky-com systemd: Starting /etc/rc.d/rc.local Compatibility... Dec 24 18:55:15 hroniky-com systemd: Starting nginx - high performance web server... Dec 24 18:55:18 hroniky-com systemd: Starting System Logging Service... Dec 24 18:55:18 hroniky-com systemd: Starting LSB: Bring up/down networking... Dec 24 18:55:18 hroniky-com nginx: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok Dec 24 18:55:18 hroniky-com nginx: nginx: [emerg] bind() to 172.23.23.161:80 failed (99: Cannot assign requested address) Dec 24 18:55:18 hroniky-com nginx: nginx: configuration file /etc/nginx/nginx.conf test failed Dec 24 18:55:18 hroniky-com systemd: Starting The PHP FastCGI Process Manager... Dec 24 18:55:18 hroniky-com systemd: Started OpenSSH server daemon. Dec 24 18:55:18 hroniky-com systemd: Starting OpenSSH server daemon... Dec 24 18:55:18 hroniky-com systemd: Starting Login Service... Dec 24 18:55:18 hroniky-com systemd: Starting Dump dmesg to /var/log/dmesg... Dec 24 18:55:18 hroniky-com systemd: Started Permit User Sessions. Dec 24 18:55:18 hroniky-com systemd: Started /etc/rc.d/rc.local Compatibility. Dec 24 18:55:18 hroniky-com systemd: nginx.service: control process exited, code=exited status=1 Dec 24 18:55:18 hroniky-com systemd: Failed to start nginx - high performance web server. Dec 24 18:55:18 hroniky-com systemd: Unit nginx.service entered failed state. Dec 24 18:55:18 hroniky-com systemd: nginx.service failed. # cat /etc/systemd/system/multi-user.target.wants/nginx.service [Unit] Description=nginx - high performance web server Documentation=http://nginx.org/en/docs/ After=network.target remote-fs.target nss-lookup.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 -- Best regards, Gena ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru