デバイスがインストール/削除されるたびに、ユーザーデバイスの起動/停止

デバイスがインストール/削除されるたびに、ユーザーデバイスの起動/停止

最大のファイルのほとんどをリムーバブルディスクに移動し、その一部もシードしたいと思いました。私は私のユーザーの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

おすすめ記事