最初はUbuntuフォーラムにこの記事を投稿しようとしましたが、ここでより多くの視聴者に近づきたいと思います。
fstabにNFS / CIFSをマウントしてから、サービスが使用する設定があります(私の場合、サービスはDockerコンテナとして提供されます)。
一般的にすべてが大丈夫です。私のsystemdサービスが起動したら、マウントポイント(私のデバイスがとして定義されているRequiresMountsFor=
)が正しくロードされていることを確認してください。私のマウントポイントは、/etc/fstab
私のネットワークで内部的に解決されるFQDN名を使用して定義されます。
nas.home.ca:/mnt/HomeNAS /mnt/nas nfs ro 0 0
nas.home.ca:/mnt/HomeNAS/VM/Config/Alma-Docker1 /mnt/docker nfs rw 0 0
//nas.home.ca/Restore /mnt/restore cifs credentials=/etc/fstab.credentials.backup,file_mode=0777,dir_mode=02777 0 0
サービスの開始時に内部ネームサーバーがオフラインの場合、問題が発生します。マウントがまだ存在しない場合、FQDN 未確認エラーが原因でマウントが迅速に失敗し、systemd はマウントを再マウントしようとしません。したがって、私のサービスも開始されず、依存関係の失敗のために再起動を試みません。
fstabで利用可能なオプションを見てみましたが、x.systemd
失敗したときに再起動/再試行するようにマウントデバイスを設定するエントリが見つかりませんでした。
[eric@dockervm2 system]$ sudo systemctl start mnt-nas.mount
Job failed. See "journalctl -xe" for details.
[eric@dockervm2 system]$ sudo systemctl start mnt-restore.mount
Job failed. See "journalctl -xe" for details.
[eric@dockervm2 system]$ sudo systemctl start mnt-docker.mount
Job failed. See "journalctl -xe" for details.
[eric@dockervm2 system]$ sudo journalctl -xe
したがって、サービスを開始しようとすると、次のエラーメッセージが表示されます。
[eric@dockervm2 system]$ sudo systemctl start backup-docker-compose
A dependency job for backup-docker-compose.service failed. See 'journalctl -xe' for details.
再試行できるようにマウントポイントをどのように設定しますか?問題は、私のネームサーバーがオフラインで、私のネームサーバーがバックアップされ実行されるまでXXX秒ごとに再起動しようとしていることです。 fqdn(または/ etc / hostsファイルのローカルエントリ)の代わりにfstabのIPを使用してこの問題を解決できることを知っていますが、そのような目的は無視されます。
再試行を続行するためにsystemdでローカルに設定する方法はありますか?
答え1
多くの方がお問い合わせいただきましたが、答えは「いいえ」のようです。
https://github.com/systemd/systemd/issues/4468
私はsystemdマウントを無視し、マウントをサービスとして実装することでこの問題を解決しました。たとえば、
[root@adele ~]# cat /etc/systemd/system/srv-music.service
[Unit]
Description=Media devices
After=network.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/bin/mount -t nfs4 -o vers=4,minorversion=1,owner,ro darknight.localdomain6:/Media /srv/music
ExecStop=/usr/bin/umount /srv/music
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
上記のキーワードRestart
はとですRestartSec
。