시스템화 된 서비스 유닛 파일을 작성하여 시작하기 전에 특정 인터페이스가 작동 할 때까지 대기하는 방법은 무엇입니까?


14

데비안에서 hostapd에 대한 단위 파일을 쓰려고합니다.

hostapd 데몬은 연결된 Wifi 인터페이스가 실행되기 전에 또는 그렇지 않으면 SEGV의 인터페이스가 필요한 것으로 보입니다.

network-online.target을 시도했지만 여전히 SEGV를 얻습니다. network-online.target은 모든 인터페이스를 볼 필요가 있고 Wi-Fi 인터페이스가 hostapd가 작동하기에 충분히 준비되기 전에 다른 인터페이스가 나타나기 때문이라고 생각합니다.

서비스를 시작하기 전에 특정 인터페이스가 작동하기를 기다리는 가장 좋은 방법은 무엇입니까?

답변:


15

systemd 219부터 기다릴 인터페이스를 지정 systemd-networkd-wait-online하는 --interface매개 변수 와 함께 systemd의 도구를 직접 사용할 수 있습니다 . 예를 들면 다음과 같습니다.

ExecStartPre=/usr/lib/systemd/systemd-networkd-wait-online --interface=$IFACE

그러나 경고가 있습니다. 이 도구는 systemd-networkd구성에서 아무 것도 수행하지 않더라도 실행 중이어야합니다. 한편, 동일한 시스템 (219)으로 시작하여 systemd-networkd소켓 작동 가능하고 유휴 상태에서 자동으로 종료된다. 따라서 필요한 것은 소켓을 당기는 것입니다.

모두 합치면 단위 파일에 대한 수정은 다음과 같습니다 ( $IFACE원하는 인터페이스 로 대체 됨).

[Unit]
Requires=systemd-networkd.socket
After=systemd-networkd.socket
...

[Service]
ExecStartPre=/usr/lib/systemd/systemd-networkd-wait-online --interface=$IFACE
ExecStart=/usr/bin/hostapd ...
...

1
예, 이것이 제가 원하는 것입니다. 불행히도 systemd 44와 함께 데비안 4.6.3에 붙어 있으므로 사용할 수 없습니다. 이 플랫폼에서 작동시키는 방법에 대한 아이디어가 있습니까? 감사!
bigjosh

2
@bigjosh, 당신은 항상 같은 것을 할 수있는 perl -e 'sleep 1 until -e "/sys/class/net/myinterface"'당신의 ExecStartPre에서
스테판 Chazelas가
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.