Systemd は直ちに execstop を実行します。

Systemd は直ちに execstop を実行します。

職場では、システム監視のためにNagiosを実行しています。 Nagiosデータをpostgresqlデータベースに保存するためのPythonスクリプトを作成しました。これはcentos 7.6で実行されます。 systemdサービスファイルを使用すると、スクリプトを起動して問題なく再起動できます(何らかの理由で終了する必要がある場合)。特定の場所のファイルに書き込むことで、制御された方法でスクリプトを停止できます。手動で停止すると正常に動作しますが、systemdを介して使用しようとすると機能しません。

私のサービスファイルは次のとおりです。

[Unit]
Description=Nagiosdata to postgresql
After=postgresql-12.service

[Service]
Type=simple
ExecStart=/usr/bin/python3 /usr/local/nagios/libexec/importdata
StandardInput=null
User=nagios
Restart=on-failure
RestartSec=30s
TimeoutStopSec= 180 
ExecStop=/usr/bin/touch <file to stop the process>

[Install]
WantedBy=multi-user.target

TimeoutStopSecとExecStop(以下を参照)を追加すると、systemdはプロセスを開始した直後に制御ファイルを作成し、プロセスを再び停止します。タイプをブランチに設定しようとしましたが(対話式で実行すると、スクリプトが前景で実行されるため、私が知っている限り正しくありません)、同じ結果が得られました。

systemctl status dataimportを実行するときにExecStop行がない場合、ステータスは「アクティブ」(実行中)であることがわかりました。 ExecStopを使用すると、私の状態は「アクティブ」(終了)です。

別の作業を行う必要がありますか、またはCentOS 7.6のsystemd 219では機能しませんか?

ベストアンサー1

おすすめ記事