起動するはずのsystemd
.service
スクリプトを使用していますafter起動時に、CIFSネットワークの場所が/etc/fstab
から/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
の行に追加しようとしましたが、期待した結果が得られませんでした。
cIFSネットワークの場所は、起動時に
/etc/fstab
から/mnt/
を介してマウントされます。
いいえそうではありません。これを正しく行うと、残りは自然に整います。
マウントは、(生成された)systemdマウントユニットによって処理され、mnt-wibble.mount
のような名前になります。実際の名前はsystemctl list-units --type=mount
コマンドの出力で確認できます。 systemctl status
を使用する他のユニットと同じように、詳細に見ることができます。
非常に簡単に言えば、マウントユニットが起動した後にユニットを起動するように注文する必要があります。
After = network.target vpn-launch.service mnt-wibble.mount
申し訳ありませんが、まだコメントできません。
JdeBPが言ったように、ファイルシステムマウントで注文する必要があります。マウントユニットの名前を予測するか、または(ユニットセクションで)使用できます。
RequiresMountsFor =/absolute/path/of/mount
このオプションは、適切な* .mountユニットへの依存関係を作成して、サービスを開始する前にパスにアクセスできるようにします。すべてのsystemdバージョンにあるとは限りませんが、CentOS 7マシンで過去6か月ほど使用しています。
どちらの答えも正しいですが、2セントをディスカッションに追加したいと思います。探していたので、いくつかの指示と続行方法の例がなかったためです。
/etc/fstab
に追加しますmount -a
と入力すると、fstabに記載されているすべてのファイルシステムがマウントされます。systemctl list-units | grep '/path/to/mount' | awk '{ print $1 }'
.mount
で終わるものを返す必要があります)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):
mnt-cifs.mount
をRequires=
リストに追加すると、cifsマウントが正常にマウントされなかった場合にmy-daemon.service
が起動しなくなります。@ bm-bergmotte:私を大いに助けてくれたあなたの指示に感謝します。私にとっては、うまくいっています。
After=network.target vpn-launch.service mnt-cifs.mount
Requires=vpn-launch.service mnt-cifs.mount
「mnt-cifs.mount」を「必須」内に(この順序で)入れない場合、再起動/起動で機能しますが、デバイスがマウントされていない場合でもサービスは起動します。デバイスがマウントされていなかった場合は、サービスを追加する前に、 "" Requires "内にデバイスがマウントされます。