web-dev-qa-db-ja.com

USBドライブがマウントされるまで、送信デーモンの起動を待ちますか?

OSMCでsystemdサービスとしてtransmission-daemonを実行しています。再起動後にリモートコントロールWebインターフェイスを開くと、ほとんどの場合、「エラー:データが見つかりません!ドライブが接続されていることを確認してください[...]」というメッセージが表示され、すべての転送が停止します。

これは、ダウンロードパスが存在する前に送信が開始されるためだと思います。この場合、手動で構成することなく、システムによって/media/Elements/[...]に自動的にマウントされるUSBドライブ上にあります。私はfstabを編集していません。

この答えを試してみた後 成功しなかった後、これを解決する他の方法があるかどうか疑問に思っていますか?その答えに従って私がしたことは、override.confに以下を追加することでした:

cat /etc/systemd/system/transmission.service.d/override.conf

[Unit]
After=media-Elements.mount
After=media-Vault\x2013.mount
After=media-Black\x20Mesa.mount

サービスファイル:

$ cat /lib/systemd/system/transmission.service

[Unit]
Description=Transmission BitTorrent Daemon
After=udisks-glue.service

[Service]
User=osmc
Group=osmc
Type=notify
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/transmission-daemon -f --log-error --allowed *.*.*.*

[Install]
WantedBy=multi-user.target

Systemdステータス:

$ systemctl status transmission

● transmission.service - Transmission BitTorrent Daemon
   Loaded: loaded (/lib/systemd/system/transmission.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/transmission.service.d
           └─override.conf
[...]

言及する価値があるは、再起動するたびにtransmissionのステータスを確認するとWarning: transmission.service changed on disk. Run 'systemctl daemon-reload' to reload units.が表示されることです。 daemon-reloadは、次の再起動までそれを沈黙させます。

この質問 は関連していますが、fstabマウントに関係しています。 USBドライブを永続的に接続されたものとして扱いたくないので、可能であればfstabなしで解決したいと思います。


最初の答えを試した後:

$ systemctl cat --no-pager transmission.service
# Warning: transmission.service changed on disk, the version systemd has loaded is outdated.
# This output shows the current version of the unit's original fragment and drop-in files.
# If fragments or drop-ins were added or removed, they are not properly reflected in this output.
# Run 'systemctl daemon-reload' to reload units.
# /lib/systemd/system/transmission.service
[Unit]
Description=Transmission BitTorrent Daemon
After=udisks-glue.service

[Service]
User=osmc
Group=osmc
Type=notify
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/transmission-daemon -f --log-error --allowed *.*.*.*

[Install]
WantedBy=multi-user.target

# /etc/systemd/system/transmission.service.d/override.conf

[Unit]
RequiresMountsFor=/media/Elements

[Install]
WantedBy=media-Elements.mount
7
Andreas

[〜#〜] edit [〜#〜]:最初のアプローチが期待どおりに機能しなかったことがわかりました。オーバーライドファイルの[Install]セクションは実際には機能せず、RequiresMountsFor=はfstabで宣言されているマウントに対してのみ機能するようです。したがって、同じ効果を実現するが、異なるディレクティブを使用する代替案を提案しています。

/media/Elementsボリュームがマウントされていない限りユニットが起動しないようにするには、 ConditionPathIsMountPoint= ディレクティブを使用します。このディレクティブをチェックし、そのディレクトリがマウントされていない限りユニットが起動しないようにします。

# /etc/systemd/system/transmission.service.d/override.conf

[Unit]
ConditionPathIsMountPoint=/media/Elements

(注:systemctl edit transmission.serviceコマンドを使用して、このオーバーライドファイルでエディターを開くことができます。)

USBがマウントされるたびにtransmission.serviceの開始をトリガーするには、マウントユニットの.wants/ディレクトリにシンボリックリンクを追加する必要があります。 (理想的には、これは[Install]セクションによって処理されますが、オーバーライドファイルからは機能しないようです。)

次の2つのコマンドを使用して手動で作成します。

$ Sudo mkdir -p /etc/systemd/system/media-Elements.mount.wants/
$ Sudo ln -sf /lib/systemd/system/transmission.service /etc/systemd/system/media-Elements.mount.wants/

準備ができたら、/media/Elementsをマウントして、Transmissionの開始を確認してください...


以下の元の答え...

したがって、 After= ディレクティブは順序付けにのみ影響します。両方のユニットが開始するためにキューに入れられている場合、これは他のユニットが完了した後に開始されますが、開始をトリガーしません別のもの。そのためには Requires= が必要です。

しかし、マウントの場合、 RequiresMountsFor= に素敵なショートカットがあり、マウントをパスとして使用できます。

また、USBドライブがマウントされたときにこのユニットが起動するように設定することもできます。 WantedBy=[Install]セクション内)を使用し、ここから.mountユニットを参照することで、これをトリガーできます。それをセットアップし、systemctl enableを使用して「Wanted」関係を作成した後、このユニットの起動は、USBドライブがマウントされたときに(また、起動後にではなく)トリガーされます。

すべてを一緒に入れて:

# /etc/systemd/system/transmission.service.d/override.conf

[Unit]
RequiresMountsFor=/media/Elements "/media/Vault 13" "/media/Black Mesa"

[Install]
WantedBy=media-Elements.mount
WantedBy=media-Vault\x2013.mount
WantedBy=media-Black\x20Mesa.mount

次に、このユニットを有効にします。これにより、*.mount.wants/ディレクトリの下にシンボリックリンクが作成されます(正確なシンボリックリンク名はsystemctl enable出力に出力されます)。

# systemctl enable transmission.service

これで問題は解決します。

質問のテキストでは/media/Elementsのみがトランスミッションのダウンロードを保存するために使用されているので、なぜ3つのマウントをリストしているのか私にはわかりません...確かにそうであれば、おそらく他の2つを削除できます。 「要素」への参照のみを保持します。

[〜#〜]注[〜#〜]:投稿する前にこれをすべてテストしたわけではありませんが、これが機能することはかなり確信しています。何らかの理由でそうではありません。詳細をコメントで残してください。これを理解できるようにサポートさせていただきます。)

6
filbranden