고쳐 쓰다

고쳐 쓰다

저는 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"

관련 정보