Debian Jessie에서 시스템 서비스를 만들려고 합니다. network-online.target
도착하자마자 시작 해야 합니다 .
인터페이스가 아직 구성되지 않았고 DHCP 쿼리가 막 시작되었을 때 문제가 network-online.target
동시에 발생 했습니다.network.target
이 문제는 오래된 네트워크 구성을 사용하는 Debian에만 해당되는 것 같습니다.
이 문제를 우회하는 방법이나 작동시키는 방법은 무엇입니까 network-online.target
?
답변1
를 사용하고 있으므로 /etc/network/interfaces
각 인터페이스의 상태를 모니터링하려면 systemd 서비스가 필요합니다. 사용 가능한지 확인하십시오(Ubuntu 15.04의 패키지를 통해 설치됨 /lib/systemd/system/ifup-wait-all-auto.service
). ifupdown
그렇지 않은 경우 /etc/systemd/system/ifup-wait-all-auto.service
다음을 생성하여 붙여넣습니다.
[Unit]
Description=Wait for all "auto" /etc/network/interfaces to be up for network-online.target
Documentation=man:interfaces(5) man:ifup(8)
DefaultDependencies=no
After=local-fs.target
Before=network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutStartSec=2min
ExecStart=/bin/sh -ec '\
for i in $(ifquery --list --exclude lo --allow auto); do INTERFACES="$INTERFACES$i "; done; \
[ -n "$INTERFACES" ] || exit 0; \
while ! ifquery --state $INTERFACES >/dev/null; do sleep 1; done; \
for i in $INTERFACES; do while [ -e /run/network/ifup-$i.pid ]; do sleep 0.2; done; done'
[Install]
WantedBy=network-online.target
Ubuntu 15.04 시스템에 존재하는 서비스 파일이지만 [Install]
작업을 좀 더 쉽게 하기 위해 섹션이 추가되었습니다. Ubuntu 15.04의 동작이 ifup
Debian Jessie의 동작과 동일하기 를 원합니다 . ifup
그렇지 않은 경우 일부 수정이 필요합니다(특히 마지막 줄).
그런 다음 sudo systemctl enable ifup-wait-all-auto.service
. 컴퓨터를 다시 시작한 후에는 network-online.target
(적어도) 인터페이스를 시작한 후 도달한 것을 확인해야 합니다.
답변2
한 번 찾았어요Github에 대한 답변지속적으로 서버에 ping을 시도하여 문제가 해결되었습니다. 핑이 성공한 경우에만 서비스가 계속됩니다.
[Service]
ExecStartPre=/bin/sh -c 'until ping -c1 google.com; do sleep 1; done;'
ExecStart=<your command>
google.com
내 메인 스크립트가 내 서버에 연결되어야 하기 때문에 이것을 내 서버로 교체했습니다 .
답변3
주목! 방금 Raspbian Jessie에서 알아냈습니다. /etc/network 인터페이스에서 모든 주석 줄을 제거하면 작동합니다! 이것은 구문 분석 오류인 것 같습니다 =) 제 특별한 경우에는 댓글을 남기고 iface eth0 inet dhcp
오래 전에 잊어버렸지만 Raspbian Jessie로 업그레이드하고 커널을 재구축한 후 매우 이상한 동작이 발생했습니다. DHCP를 사용하고 조정을 거부합니다. /etc/네트워크/인터페이스. 그래서 나는 그것에 대한 모든 설명을 제거했습니다. 작업 라인만 다시 시작하고 작동했습니다! 스크립트 패치/편집이 필요하지 않습니다!
답변4
모든https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/서비스 시작을 위한 권장 방법뒤쪽에네트워크는 수평적이며 "네트워크 온라인.대상" 내부에. 제공하다문서:
"After=network-online.target"
"Wants=network-online.target"
그러나 "네트워크 온라인.대상"네트워크가 완전히 수평이 아니기 때문에 서비스가 실패했으며 오류가 있음을 발견했습니다(https://github.com/coreos/bugs/issues/1966) 그리고 그것은 100% 정확하다고 보장되지 않습니다.
실제로 다음과 같은 동적 네트워크 구성 도구는네트워크 관리자"이런 맥락에서 사용되는 네트워크 상태는 결코 100% 정확하거나 예측 가능하지 않습니다. 분명히 오류를 설명하는 링크에서 판단할 수 있습니다."네트워크 온라인.대상" 사용하는 애플리케이션에 따라 동작이 일관되지 않을 수 있습니다.
해결책:
서비스의 시작 순서를 분석하여 이후에 시작된 서비스를 이용해야 합니다.네트워크 온라인.대상":
systemd-analyze plot > /home/pi/graph.svg
이는 오류 없이 네트워크 수준과 서비스 시작을 보장하는 대상을 찾을 때까지 점차적으로 이후 서비스로 대상을 변경하는 반복 프로세스입니다. 내 경우에는 sleep 10
스크립트에 SystemD 서비스 호출을 추가 해야 했습니다 .