web-dev-qa-db-ja.com

再起動またはシャットダウン時に/ usr / lib / systemd / system-shutdown /内のスクリプトを実行する方法は?

この答えこのバグレポート によると、スクリプトを単にドロップすることができます

/usr/lib/systemd/system-shutdown/

またはDebian for

/lib/systemd/system-shutdown/

再起動またはシャットダウン時に実行させる。から

https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html

実際のシステムを実行する直前にhalt/poweroff/reboot/kexec systemd-shutdownはすべての実行可能ファイルを/ usr/lib/systemd/system-shutdown /で実行し、それらに1つの引数を渡します: "halt"、 "poweroff"、 "reboot選択したアクションに応じて、 "または" kexec "。このディレクトリ内のすべての実行可能ファイルは並行して実行され、すべての実行可能ファイルが終了するまでアクションの実行は継続されません。

私のスクリプトは Debian 9またはRaspbian 8(Jessie)のシャットダウン時にスクリプトを実行する方法 として説明されています。

#!/bin/sh
touch /test

しかし、私のDebianシステムでは動作しないようで、 bug と報告しました。

6
Frank Breitling

実際、スクリプトは実行中です。 Bigonとバグレポートで指摘されているように、touchは、ファイルシステムが/lib/systemd/system-shutdown/が実行されます。

touchの前にマウントしてfsを読み書きすることで、これを証明できます。

#!/bin/sh
mount -oremount,rw /
touch /test
mount -oremount,ro /

/testは、再起動後に実際に表示されます。

ただし、これは、このフォルダーを介してスクリプトを実行するのが遅すぎるため、役に立たないことも意味します。

ログファイルなどに書き込むには、 Bigon によって提案されているように、サービスを介して以前にスクリプトを実行する必要があります。これについては、 Debian 9またはRaspbian 8(Jessie)でシャットダウン時にスクリプトを実行する方法 で説明します。

5
Frank Breitling

したがって、マシンのシャットダウン中にスクリプトを実行する場合は、.serviceファイルを追加する必要があります。以下を参照してください。 シャットダウンの直前にsystemdでスクリプトを実行する方法

/lib/systemd/system-shutdown/は特別な場合のために予約されており、シャットダウン/再起動手順の最後に実行されます

3
Bigon