내 시스템 서비스가 네트워크를 기다리지 않는 이유는 무엇입니까?

내 시스템 서비스가 네트워크를 기다리지 않는 이유는 무엇입니까?

모든이것질문과 답변, 서비스 파일에 다음을 추가했습니다.

Wants=network-online.target
After=docker.service network.target network-online.target

나는 또한 다음을 실행했습니다.

systemctl enable NetworkManager-wait-online.service
systemd-networkd-wait-online.service

그러나 ExecStartPre연결 문제로 인해 사용 중인 작업이 계속 실패합니다.git pull origin master

Mar 22 16:17:21 COMPUTER git[1983]: ssh: Could not resolve hostname github.com: Name or service not known
Mar 22 16:17:21 COMPUTER git[1983]: fatal: Could not read from remote repository.

나는 분명한 것을 놓치고 있습니까? 다른 서비스가 제공될 때까지 기다려야 합니까 git pull? (관련이 있는 경우 Ubuntu 16.10 및 systemd 231을 사용하고 있습니다.)

답변1

NetworkManager첫 번째 단계는 또는 를 사용하고 있는지 확인하는 것입니다 systemd-networkd. wait-online사용 중인 제품에 대해 활성화합니다( systemd-networkd이 예에서는 가정).

systemctl enable systemd-networkd-wait-online.service

서비스 종료 후 시작 wait-online:

[Unit]
...
After=systemd-networkd-wait-online.service
Requires=systemd-networkd-wait-online.service

(requires 는 더 엄격한 변형이며 wants, 이 경우 하드 종속성을 원하는 것 같습니다).

이렇게 하면 네트워크 작동이 보장된 후에 서비스가 시작됩니다.


또는 (또는 이전 솔루션과 함께) 다음 플래그를 사용하여 실패 시 서비스를 다시 시작하도록 구성할 수 있습니다 Restart=.

[Service]
...
Restart=on-failure
RestartSec=5

https://www.freedesktop.org/software/systemd/man/systemd.service.html#Restart=

이는 시작 속도를 늦추지 않으므로 아마도 더 나은 접근 방식일 것입니다(https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/#cutthecraphhowdoimakenetwork.targetworkforme- wait-online부팅 시간이 상당히 느려질 수 있습니다. 그러나 서비스가 실패할 경우 어떻게 될지 걱정된다면 옵션 1 또는 둘 다를 선택하세요.

관련 정보