推奨される解決策は、サービス ユニットを通常のサービスとして実行することです - [Install]
を見てください。 セクション。したがって、依存関係もすべて逆に考える必要があります。シャットダウンの順序が逆の起動順序であるためです。そのため、スクリプトを ExecStop=
に配置する必要があります .
次の解決策は私のために働いています:
[Unit]
Description=...
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=<your script/program>
[Install]
WantedBy=multi-user.target
RemainAfterExit=true
ExecStart
がない場合に必要です アクション。
ファイルを作成したら、必ず systemctl daemon-reload
および systemctl enable yourservice --now
.
systemd IRC から入手しました。クレジットは mezcalero に送られます。
-
開始直前にサービスを実行するには 再起動/シャットダウン/停止/kexec サービスのいずれか (つまり、ルート ファイルシステムが読み取り専用で再マウントされる前の最後の瞬間) は、このサービス構成を使用します:
[Unit] Description=Save system clock on shutdown DefaultDependencies=no After=final.target [Service] Type=oneshot ExecStart=/usr/lib/systemd/scripts/fake-hwclock.sh save [Install] WantedBy=final.target
次で有効にします:
systemctl enable my_service.service
-
スクリプトを実際の直前に実行するには reboot/shutdown/halt/kexec (読み取り専用で再マウントされたためにルート ファイルシステムに書き込めない場合) このスクリプト実行可能ファイルを
<ブロック引用>/usr/lib/systemd/system-shutdown
に追加します。 ディレクトリ。実際のシステムを実行する直前に、halt/poweroff/reboot/kexec systemd-shutdown は /usr/lib/systemd/system-shutdown/ 内のすべての実行可能ファイルを実行し、「halt」、「poweroff」、「reboot」のいずれかの引数を渡します。選択したアクションに応じて、" または "kexec"。このディレクトリ内のすべての実行可能ファイルは並行して実行され、すべての実行可能ファイルが終了するまでアクションの実行は続行されません。
以下も参照してください:
https://www.freedesktop.org/software/systemd/man/bootup.html
https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html
私が見る限り、これは私が必要としているものです (しかし、正確な理由はわかりません)。
[Unit]
Description=Log Traffic
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
[Service]
ExecStart=/usr/local/bin/perl /home/me/log_traffic.pl --stop
Type=oneshot