fstabがマウントされた後に実行されるようにsystemdサービスを設定する

fstabがマウントされた後に実行されるようにsystemdサービスを設定する

systemd .service開始する必要があるスクリプトを作成しています。後ろに/etc/fstabCIFSネットワークの場所は/mnt/起動時にマウントされます。

スクリプトはOpenVPN依存関係スクリプトが最初に起動するのを待ちますが、インストールが完了するのを待ちます。

/etc/systemd/system/my-daemon.service:

[Unit]
Description=Launch My Daemon
After=network.target vpn-launch.service
Requires=vpn-launch.service

systemd.mount行に追加しようとしましたが、After=network.target vpn-launch.service systemd.mount目的の結果が得られませんでした。

答え1

/etc/fstabCIFSネットワークの場所は/mnt/起動時にマウントされます。

まったくそうではありません。これを正しくすれば、残りは所定の位置になります。

マウントはsystemdによって処理されます(生成されます)。設置単位次の名前が付けられますmnt-wibble.mount。次のコマンドの出力で実際の名前を表示できます。

systemctl list-units --type=mount

他のユニットと同様に詳細を見ることができます。

systemctl status

とても簡単です。インストールデバイスの起動後にデバイスを起動するように指示する必要があります。

After=network.target vpn-launch.service mnt-wibble.mount

追加読書

答え2

どちらの答えも正確ですが、ディスカッションを見つけるときに進む方法に関するいくつかのガイドラインと例がありません。ディスカッションに2セントを追加したかったのです。

  1. ファイルシステムの追加/etc/fstab
  2. mount -afstabに記載されているすべてのファイルシステムタイプをマウントします。
  3. 生成されたシステムユニットの検索:(

    systemctl list-units | grep '/path/to/mount' | awk '{ print $1 }'

    で終わる項目を返す必要があります.mount
  4. 見つかったマウントユニットをファイルAfter=のステートメントに追加します。*.service

以下は、起動時にサービスを開始する例ですmy-daemon。ネットワークの準備ができたら、CIFS共有がマウントされ、/mnt/cifsサービスvpn-launchが開始されます。

/etc/fstab

//servername/sharename /mnt/cifs cifs defaults,some,other,options 0 0

注:fstabオプションに追加する必要がありますnofail(たとえば、外付けドライブを使用している場合)。それ以外の場合、デバイスが接続されていないとマシンは起動しません。バラよりArchWikiのfstab記事


/etc/systemd/system/my-daemon.service

[Unit]
Description=Launch My Daemon
Requires=vpn-launch.service mnt-cifs.mount
After=network.target vpn-launch.service mnt-cifs.mount

[Service]
ExecStart=/path/to/my-daemon

[Install]
WantedBy=multi-user.target

起動時にサービスが開始されるようにサービスを有効にすることを忘れないでください。systemctl enable my-daemon

これは他のファイルシステム(NFS、HDDなど)にも当てはまります。

すでに述べたように、両方の答えは正しいので、誰もが読んでください。しかし、私の場合は、いくつかの例で時間を節約できます。

アップデート(2019-06-25):

  • 外部ドライブを使用するときのブートロックを防ぐために、fstabオプションに関する注意事項が追加されました。
  • 正常にマウントされなかった場合、cifsマウントが開始されない原因リストにmnt-cifs.mount追加されました。Requires=my-daemon.service

答え3

申し訳ありません。まだコメントできません。

JdeBPが述べたように、ファイルシステムのマウントをソートする必要があります。インストールされているデバイスの名前を予測するか(ユニットセクションで)、次を使用できます。

RequiresMountsFor=/absolute/path/of/installation

このオプションは、サービスを開始する前にパスにアクセスできるように、適切な* .mountユニットへの依存関係を作成します。すべてのシステムバージョンで動作するわけではありませんが、過去6ヶ月間CentOS 7システムで使用されてきました。

答え4

@bm-bergmotte: ご指導ありがとうございます。多くの助けになりました。私には私が置く必要があります。

After=network.target vpn-launch.service mnt-cifs.mount
Requires=vpn-launch.service mnt-cifs.mount

「mnt-cifs.mount」を「必要」に対応する順序で入れないと、再起動/起動されますが、デバイスがマウントされていない場合、サービスは引き続き開始されます。デバイスがインストールされていない場合は、さらに「必須」に設定すると、サービスの開始前にデバイスがインストールされます。

関連情報