回答:
推奨される解決策は、サービスユニットを通常のサービスとして実行すること[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
。
システム化されたIRCから得たばかりで、クレジットはmezcaleroに送られます。
RemainAfterExit=true
なしがある場合に必要とされExecStart
ているためであるsystemd
実行しようとしませんExecStop
、それはサービスが実行されていないと考えている場合。RemainAfterExit=true
原因とsystemd
すると考えているサービスは、それによって実行させ、実行されていることをExecStop
シャットダウン時に。
私が見る限り、これは私が必要とすることを行います(しかし、正確な理由はわかりません)。
[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
kexec.target
Beforeビットに追加したい場合があります
WantedBy=shutdown.target reboot.target halt.target
しない限り、これがどのように機能するかわかりません[Unit]
。Before=
&After=
依存関係を変更しないでください。
reboot / shutdown / halt / 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
実際の再起動/シャットダウン/停止/ 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
final.target
。理想的には、ユーザーが実行した後に最初に実行されることです$ sudo reboot
。
はっきりとはわかりませんが、明示的に追加しましたが、インストール部分は必要ないと思います。私もそれをテストしませんでしたが、あなたが始めるのに役立つはずだと思います:
[Unit]
Description=Log Traffic
Requires=network.target
After=network.target
Before=shutdown.target
DefaultDependencies=no
[Service]
ExecStart=/home/me/so.pl
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=shutdown.target
ExecStart=/bin/true
です。