모든이것질문과 답변, 서비스 파일에 다음을 추가했습니다.
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 또는 둘 다를 선택하세요.