systemd
コンピュータがシャットダウンする前にいくつかのタスクを実行するサービスを作成しました。その単位ファイルは次のとおりです。
[Unit]
Before=shutdown.target
DefaultDependencies=no
[Service]
Type=simple
ExecStart=/opt/demo.sh
TimeoutSec=infinity
[Install]
WantedBy=shutdown.target
現在のコンピュータのネットワーク接続が失われる前にスクリプトが実行されますが、SSH接続が閉じてから再接続しようとすると、「接続が拒否されました」エラーで失敗します。私はスクリプト自体が終了するまで(つまりtail -f /var/log/syslog
実行できるように)SSH接続を維持することを好みます。
SSHサーバーがシャットダウンする前にスクリプトを強制する方法は?
ベストアンサー1
次のようにsystemdユニットを使用して、目的の結果を得ることができます。
[Unit]
Description=Service to run on shutdown before any other services
After=default.target
[Service]
Type=oneshot
ExecStart=/bin/true
ExecStop=/opt/demo.sh
RemainAfterExit=yes
TimeoutStopSec=0
[Install]
WantedBy=default.target
systemd は依存関係に応じて逆順でサービスを停止します。したがって、上記のサービスは、/bin/true
システムが停止/終了状態に達し、default.target
スクリプトが/opt/demo.sh
停止/終了状態になった後に開始されます。要件に応じて調整する必要がありますTimeoutStopSec
。現在はタイムアウトが発生しないように設定されています(デフォルトは90秒ではなく)。