systemdが終了する前と破壊される前に実行されるように、このセクションに[install]
何を追加する必要がありますか?/home/me/so.pl
/proc/self/net/dev
[Unit]
Description=Log Traffic
[Service]
ExecStart=/home/me/so.pl
[Install]
?
答え1
推奨される回避策は、サービスユニットを通常のサービスとして実行することです。リソースセクションを参照してください[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に行きます。
答え2
サービスの実行始める直前すべての再起動/終了/一時停止/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
スクリプトの実行実際の直前restart/shutdown/halt/kexec(読み取り専用で再マウントされていて、ルートファイルシステムに書き込めない場合)このスクリプト実行可能ファイルをディレクトリに追加します
/usr/lib/systemd/system-shutdown
。実際のシステム quit/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
答え3
わかりませんが、明示的に追加しましたが、インストール部分は必要ないと思います。私もテストしていませんが、始めるべきだと思います。
[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
答え4
私が知っている限り、これは私が必要とすることを行います(しかし理由はわかりません)。
[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