シャットダウンする前にsystemdを使用してスクリプトを実行する方法は?

シャットダウンする前にsystemdを使用してスクリプトを実行する方法は?

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-reloadsystemctl 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

関連情報