장치가 설치/제거될 때마다 사용자 장치 시작/중지

장치가 설치/제거될 때마다 사용자 장치 시작/중지

가장 큰 파일의 대부분을 이동식 디스크로 옮겼으며 그 중 일부도 시드하고 싶었습니다. 나는 내 사용자의 systemd에 의해 시작되는 토렌트 클라이언트로 Deluged를 사용합니다. 이제 드라이브는 부팅 시 삽입되거나 나중에 마운트될 수 있으며 이로 인해 혼란이 발생하고 파일 불일치에 대해 불평하게 됩니다. 가장 순진한 해결책은 장치를 마운트한 후 홍수 서비스를 시작하는 것입니다. 이것이 제가 하려는 것입니다.

나는 보았다이 답변 이는 다음을 나타냅니다.사용 RequiresMountsFor하고 따르면 systemctl --user show deluged내가 원하는 것을 수행하는 것 같습니다.

After=basic.target -.slice home.mount network-online.target media-braiam-AA64B45
RequiresMountsFor=/media/braiam/AA64B45A64B42AC9 /home/braiam

이제 장치를 이미 마운트한 경우 장치를 시작할 수 있지만 장치를 마운트 해제해도 장치가 중지되지 않으며 장치가 마운트될 때 서비스도 시작되지 않습니다.

간단히 말해서:

  • 서비스는 장치가 설치되었거나 설치 가능한 경우에만 시작됩니다.
  • 장치가 제거되는 경우 서비스가 중지됩니다.
  • 장치가 설치되면 서비스가 시작됩니다
  • 서비스가 중지되면 장치는 설치된 상태로 유지됩니다.

이것이 내가 한 일입니다:

[Unit]
Description=Deluge Bittorrent Client Daemon
After=network-online.target
RequiresMountsFor=/media/braiam/id/
BindsTo=media-braiam-id.mount

현재 이는 제거 시 서비스를 중지하고 마운트 지점을 마운트할 수 있는 경우에만 장치를 시작하고 마운트하려고 시도합니다. 루트만 마운트할 수 있기 때문에 장치를 마운트하지 않습니다(시스템용 장치를 설치하면 가능할 것 같습니다). 그러나 마운트 지점을 사용할 수 있으면 시작되지 않습니다. 내가 원하는 것을 어떻게 달성할 수 있나요?

답변1

두 장치를 함께 시작하고 중지하려면 BindsTo=가 필요합니다. 그러나 systemd는 병렬화를 선호한다는 점을 명심하십시오. 서비스를 시작하기 전에 마운트를 완전히 활성화하려면 After=도 필요합니다. 또한 반대 효과도 있습니다. 즉, 설치를 제거하려면 서비스를 완전히 중지해야 합니다.

[Unit]
Description=Deluge Bittorrent Client Daemon
After=network-online.target
BindsTo=media-braiam-id.mount
After=media-braiam-id.mount

Stack Overflow에 대한 비슷한 질문: https://stackoverflow.com/questions/48687099/filesystem-are-unmounted-before-the-services-are-stopped-in-systemd/52882065#52882065

관련 정보