ExecStopスクリプトがsystemdで実行されるイベントは何ですか?

ExecStopスクリプトがsystemdで実行されるイベントは何ですか?

複数のTomcatインスタンスを呼び出すシステムサービスがあります。

[Unit]
Description=Tomcat Services
After=network.target multi-user.target

[Service]
Type=forking
ExecStart=/users/mwe/scripts/appstart.sh
ExecStop=/users/mwe/scripts/appstop.sh
Restart=on-abort
User=webapp
Group=webgrp

[Install]
WantedBy=multi-user.target

システムをパッチ/再起動し、サービスが期待どおりに開始されました。

Jul 10 20:38:02 a8cc08d appstart.sh[5989]: [AA00001654][AA00001654_PRD] - Remove all log files older than 90 days ...
Jul 10 20:38:03 a8cc08d appstart.sh[5989]: [etp][ciiprod] - Remove all log files older than 90 days ...
Jul 10 20:38:03 a8cc08d appstart.sh[5989]: [etp][ciiprod] -----------------------------
...
Jul 10 20:38:08 a8cc08d systemd[1]: Started Tomcat Services.

ただし、約22.5時間後にExecStopスクリプトがsystemdによって実行されたようです。

Jul 11 19:00:07 a8cc08d appstop.sh[29451]: [etp][ciiprod] -----------------------------
Jul 11 19:00:48 a8cc08d appstop.sh[29451]: [2.0K blob data]
Jul 11 19:00:48 a8cc08d appstop.sh[29451]: Completed execution of . / tcruntime-ctl.sh
Jul 11 19:00:48 a8cc08d appstop.sh[29451]: [oasys][ciiprod] -----------------------------
Jul 11 19:00:48 a8cc08d appstop.sh[29451]: tcServer is not running for environment: ciiprod.
Jul 11 19:00:48 a8cc08d appstop.sh[29451]: Completed execution of . / tcruntime-ctl.sh
Jul 11 19:00:48 a8cc08d appstop.sh[29451]: [report][ciiprod] -----------------------------

現在ログインしているユーザーがなく、設定されたcronジョブもなく、autosysジョブもありません。これが発生すると、systemdがExecStopスクリプト自体を呼び出す理由を理解できません。サービスが「衝突」するとExecStopが実行されるという内容を読みましたが、これをどのように決定しますか? systemdはサービス障害をログに報告しませんか?各終了信号でアプリケーションプロセスの終了をテストしましたが、この動作を再現できませんでした。再起動するか(Restart = on-abort)、エラーのみを報告し(完全に終了した場合)、常にログにエラーを記録します。 「systemctl stop」が実行されていないことを知っています。なぜなら、「Stopping」とサービス記述がログに挿入されるからです。しかし、これは本当ではありません。表示されるのはappstop.shスクリプト(ExecStop)の出力だけです。

RHEL 7.9。 Red Hatに関連するケースがありますが、彼らはsystemdを調べて答えを見つけるとは確信していません。

修正する:さらに調査結果によれば、Tomcat インスタンスの 1 つを終了して再起動する Autosys タスクがあり、時間は appstop.sh が実行される時間と一致します。インスタンスがsystemdの外部で停止した場合、systemdはcgroup全体が健康でないか、サービスが中断されてクリーンアップを試みると考えることができますか?私はバックグラウンド「スリープ」プロセスを実行するサービスを発明してそれを複製しようとしています。しかし、最後の残りの睡眠を除くすべての睡眠を殺すことができ、systemdは気にしません。最後のサービスを終了すると、systemd は失敗したサービスを記録します。

ベストアンサー1

おすすめ記事