終了する前に、systemdサービスを使用してスクリプトを実行するのに時間がかかり、完了しません。

終了する前に、systemdサービスを使用してスクリプトを実行するのに時間がかかり、完了しません。

サーバーがシャットダウン/再開される前に、スクリプトを実行するサービスがsystemdで正常に作成されました。しかし、問題は、私のスクリプトの実行に時間がかかりすぎて(約3〜4分)、サーバーが完了する前に終了することです。デバッグログは、スクリプトが実際に実行されていたが途中で停止したことを示します。

このサービスを実装する2つの方法は次のとおりです。

[Unit]
Description=Stop Service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/user/stop-service.sh

[Install]
WantedBy=multi-user.target

そして

[Unit]
Description=Stop Service
DefaultDependencies=no
Before=final.target


[Service]
ExecStart=/home/user/stop-service.sh

[Install]
WantedBy=final.target

すべて正常に呼び出されますが、stop-service.shスクリプトの実行に時間がかかりすぎます。stop-service.shサーバーが完全にシャットダウンされる前に実行を完了させる方法はありますか?

私のサーバーはRHEL7です。

ベストアンサー1

私に合う方法を見つけました。

[Unit]
Description=Stop Service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/user/stop-service.sh
TimeoutStopSec=300

[Install]
WantedBy=multi-user.target

私の研究では、各サービスが停止コマンド(ExecStop)を実行するためのデフォルトの待ち時間は、systemdサービスが端末信号を送信する前の90秒です。 TimeoutStopSec=300 は、特定のサービスの待機時間を 5 分に設定します。

デフォルトの待ち時間を変更するには、/etc/systemd/system.confファイルを見つけてDefaultTimeoutStopSecの値を変更し、次のコマンドを使用してデーモンプロセスを再ロードできます。

systemctl daemon-reload

新しい値をロードします。

おすすめ記事