AzureでLinux(CentOS Stream 8)VMの「一時ディスク」にあるファイルを管理するためにsystemd-tmpfilesを使用しようとしています。システム起動後に手動でsystemd-tmpfiles
実行してみると、設定が正しいようです。ただし、サービスはマウントされたファイルシステムではなくマウントポイントディレクトリにファイルを生成するため、サービスでは機能しませsystemd-tmpfiles --create
ん。systemd-tmpfiles-setup
もちろん、これは全体の運動に意味があります。
一時ディスクがマウントされる前に実行されていたため、これが発生したと考えてオーバーライドアプリのプロパティを設定して問題を解決しようとsystemd-tmpfiles-setup
しました。RequiresMountsFor
/etc/systemd/system/systemd-tmpfiles-setup.service.d/override.conf
[Unit]
RequiresMountsFor=/mnt/resource
Systemdは適切なマウントデバイスを一覧表示して判断し、それを認識しているように見えますが、再systemctl list-dependencies systemd-tmpfiles-setup
起動時にマウントされた一時ディスクではなくマウントポイントディレクトリに必要なファイルを生成し続けます。
おそらく、明示的な単位ファイルを持たない必要なインストール単位と関連があるでしょう。私はsystemdを使ってscanを通してユニットを作成します/etc/fstab
。
/etc/fstab:
# ...
/dev/disk/cloud/azure_resource-part1 /mnt/resource auto defaults,nofail,x-systemd.requires=cloud-init.service,comment=cloudconfig 0 2
私は何を見逃していますか?私がやっていることがうまくいかないのに妥当な理由はありますか?
答え1
もちろん質問をしたときに答えを見つけました。システムログの次のエントリは、現在の状況を説明します。
Apr 11 21:51:02 vm-**** systemd[1]: sysinit.target: Found ordering cycle on systemd-tmpfiles-setup.service/start
Apr 11 21:51:02 vm-**** systemd[1]: sysinit.target: Found dependency on mnt-resource.mount/start
Apr 11 21:51:02 vm-**** systemd[1]: sysinit.target: Found dependency on cloud-init.service/start
Apr 11 21:51:02 vm-**** systemd[1]: sysinit.target: Found dependency on NetworkManager.service/start
Apr 11 21:51:02 vm-**** systemd[1]: sysinit.target: Found dependency on dbus.service/start
Apr 11 21:51:02 vm-**** systemd[1]: sysinit.target: Found dependency on basic.target/start
Apr 11 21:51:02 vm-**** systemd[1]: sysinit.target: Found dependency on sysinit.target/start
Apr 11 21:51:02 vm-**** systemd[1]: sysinit.target: Job systemd-tmpfiles-setup.service/start deleted to break ordering cycle starting with sysinit.target/start
(文書化されていません:sysinit.targetはsystemd-tmpfiles-setup.serviceによって異なります。)
Systemd は、最適なカバレッジ要件を無視してサイクルを中断します。したがって、systemd-tmpfilesを使用してこれを実行したい場合は、systemd-tmpfile-setup
別のカスタムサービスを追加する必要があります。