데비안에서 Hostapd용 유닛 파일을 작성하려고 합니다.
Hostapd 데몬은 실행하기 전에 Wi-Fi 인터페이스와 관련된 인터페이스를 시작해야 하는 것 같습니다. 그렇지 않으면 SEGV가 사용됩니다.
network-online.target을 시도했지만 여전히 SEGV를 얻습니다. 제 생각에는 network-online.target이 인터페이스만 확인하면 되고, Wi-Fi 인터페이스가 Hostapd가 제대로 작동할 준비가 되기 전에 다른 인터페이스가 나타나기 때문인 것 같습니다.
서비스를 시작하기 전에 특정 인터페이스가 시작될 때까지 기다리게 하는 가장 좋은 방법은 무엇입니까?
답변1
systemd 219부터 다음 systemd-networkd-wait-online
과 같이 systemd의 도구를 직접 사용할 수 있습니다.--interface
매개변수는 대기할 인터페이스를 지정합니다. 예를 들어:
ExecStartPre=/usr/lib/systemd/systemd-networkd-wait-online --interface=$IFACE
그러나주의 사항이 있습니다. systemd-networkd
구성에서 아무 작업도 수행하지 않더라도 도구를 실행해야 합니다 . 반면에 동일한 systemd 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 ...
...