![특정 인터페이스가 시작되기 전에 시작될 때까지 기다리도록 시스템 서비스 단위 파일을 작성하려면 어떻게 해야 합니까?](https://linux55.com/image/67290/%ED%8A%B9%EC%A0%95%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EA%B0%80%20%EC%8B%9C%EC%9E%91%EB%90%98%EA%B8%B0%20%EC%A0%84%EC%97%90%20%EC%8B%9C%EC%9E%91%EB%90%A0%20%EB%95%8C%EA%B9%8C%EC%A7%80%20%EA%B8%B0%EB%8B%A4%EB%A6%AC%EB%8F%84%EB%A1%9D%20%EC%8B%9C%EC%8A%A4%ED%85%9C%20%EC%84%9C%EB%B9%84%EC%8A%A4%20%EB%8B%A8%EC%9C%84%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%9E%91%EC%84%B1%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
데비안에서 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 ...
...