Найти в Дзене
HippoLab - блог про Linux

QuickFix - застравляем systemd запускать сервис после настройки сети

Как известно systemd позволяет гибко оперировать зависимостями. Вы можете сделать так, что сервис, например nginx, будет ждать пока поднимется сеть, будет примонтирован диск с данными, стартанет бэкенд и так далее. Но если вы это читаете, значит вы наверняка заметили, что если выставить для сервиса зависимость вида Requires=network-online.target или After=network-online.target Сервис все равно стартует до того как сеть фактически была поднята. Дело все в том, что по-умолчанию ( ¯\_(ツ*_* )_/¯ ) во многих дистрибутивах выключена проверка на наличие возможности связываться с внешними узлами сети и network-online.target стартует сразу после network.target, который сеть-то саму не проверяет, а просто следит, что стек TCP/IP в ядре поднялся. Проверка наличия возможности связываться с другими узлами сети в том числе с использованием DNS, обеспечивается сервисом systemd-networkd-wait-online.service. Соответственно, чтобы решить проблему активируем сервис systemctl enable systemd-networkd-wait-

Как известно systemd позволяет гибко оперировать зависимостями. Вы можете сделать так, что сервис, например nginx, будет ждать пока поднимется сеть, будет примонтирован диск с данными, стартанет бэкенд и так далее. Но если вы это читаете, значит вы наверняка заметили, что если выставить для сервиса зависимость вида

Requires=network-online.target

или

After=network-online.target

Сервис все равно стартует до того как сеть фактически была поднята. Дело все в том, что по-умолчанию ( ¯\_(ツ*_* )_/¯ ) во многих дистрибутивах выключена проверка на наличие возможности связываться с внешними узлами сети и network-online.target стартует сразу после network.target, который сеть-то саму не проверяет, а просто следит, что стек TCP/IP в ядре поднялся.

Проверка наличия возможности связываться с другими узлами сети в том числе с использованием DNS, обеспечивается сервисом systemd-networkd-wait-online.service. Соответственно, чтобы решить проблему активируем сервис

systemctl enable systemd-networkd-wait-online.service

И перезагружаем машину.

П.с. само собой разумеется, вы должны использовать systemd-networkd для настройки сети, так как systemd-networkd-wait-online от него плотно зависит. Но, собственно, что еще 2018 году можно использовать?!

_______________

Прочитали - поставьте лайк👍! Больше про сетевое администрирование - на моем канале.