![고쳐 쓰다](https://linux55.com/image/28502/%EA%B3%A0%EC%B3%90%20%EC%93%B0%EB%8B%A4.png)
저는 Arch Linux를 실행 중이고 장치가 연결되면 서비스를 시작하는 udev 규칙이 있습니다. 이 경우 3G 모뎀에 연결되면 연결에 전화가 걸립니다.
KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="[email protected]"
하지만 systemd는 장치가 제거되어도 서비스를 중지하지 않으므로 다시 연결해도 이미 실행 중이므로 서비스를 시작하지 않습니다.
나에게 필요한 것은 서비스를 중지하기 위해 장치가 제거될 때 실행되는 일치하는 udev 규칙입니다.
고쳐 쓰다
아래 답변을 사용하여 지금 가지고 있는 것은 다음 udev 규칙입니다.
KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="vodafone.service"
다음 서비스 파일을 사용하십시오(기본적으로 netcfg 서비스 파일에서 복사하여 붙여넣습니다).
[Unit]
Description=Netcfg networking service for Vodafone Dongle
Before=network.target
Wants=network.target
BindsTo=dev-gsmmodem.device
After=dev-gsmmodem.device
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/netcfg check-iface wvdial
ExecStop=-/usr/bin/netcfg down wvdial
KillMode=none
[Install]
WantedBy=multi-user.target
전화 걸기에 AUR을 사용하고 있습니다 netcfg-wvdial
.
답변1
귀하의 문제는 systemd만을 사용하여 해결할 수 있습니다. 서비스를 지정하십시오.필요아니면 더 나은 방법은,바인딩하다주어진 장치.
인용하다:
"다른 [필수/제한] 장치 중 하나가 비활성화되거나 활성화에 실패하면 이 장치 [서비스]가 비활성화됩니다."
아래와 같이 서비스 파일을 편집하면 됩니다.
[Unit]
<...>
BindsTo=<DEVICE UNIT HERE>.device
<...>
After=<DEVICE UNIT HERE>.device
참고: 사용 가능한 모든 장치 장치 파일 목록을 얻으려면 다음을 사용하십시오.systemctl list-units --all --full | grep ".device"