systemd:読み取り専用としてマウントされた後にファイルシステムが閉じられたときにスクリプトを実行する

systemd:読み取り専用としてマウントされた後にファイルシステムが閉じられたときにスクリプトを実行する

ファイルシステムを読み取り専用で再マウントした後、シャットダウン時にスクリプトを実行する方法はありますか?

ワイヤレスソケットにラズベリーパイが接続されており、送信機とスクリプトを介して制御できます。ファイルシステムが読み取り専用でマウントされたら、シャットダウン時にそのソケットを閉じたいです(Raspberry Piの電源を切る)。

私はこれを試しました:

[Unit]
Description=Test
DefaultDependencies=no
Requires=shutdown.target umount.target final.target
After=shutdown.target umount.target final.target

[Service]
Type=oneshot
ExecStart=/test
KillMode=none

[Install]
WantedBy=halt.target

script/test は現在のインストールを出力します。シャットダウン時に実行されると、ルートファイルシステムが予想される読み取り専用状態ではなく読み取り/書き込み状態にあることを示します。

編集する:

/テスト内容:

#!/bin/bash

echo -n 'Debug-Mount: ' > /dev/tty1
cat /proc/mounts | grep /dev/sda > /dev/tty1

終了時の画面出力:

ここに画像の説明を入力してください。

答え1

確かな解決策が見つかりました。スクリプトを/usr/lib/systemd/system-shutdown/に入れます。

また見なさい:https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html

実際のシステム quit/poweroff/reboot/kexec を実行する前に、systemd-shutdown は /usr/lib/systemd/system-shutdown/ にあるすべての実行可能ファイルを実行し、「halt」、「poweroff」、「reboot」という引数を渡します。または、「kexec」(選択した操作に応じて)ディレクトリ内のすべての実行可能ファイルは並列に実行され、すべての実行可能ファイルが完了するまで実行は続行されません。

答え2

元のスクリプトに関しては通常、Halt.targetの前に実行されます(halt.targetより前に注文しなかったことに注意してください)、その時点でファイルシステムは再マウントされません。 systemd-shutdown(systemdは最後に実行されます - Halt.targetに達した後)、エントリを終了し(おそらくソートされていないスクリプトで=)、最後のumount / swapoff / losetupを実行し、不可能なアンマウントを再インストールしますその後、並列に実行します。シャットダウンディレクトリを確認し、シャットダウンが存在する場合は/run/initramsでivot_root()を試してください(存在しない場合、またはピボットに失敗した場合は停止します)。

関連情報