Systemd はサービスを自動的に再起動し、停止すると機能しません。

Systemd はサービスを自動的に再起動し、停止すると機能しません。

サービスを自動的に開始する機能をプロジェクトに追加したいと思います。

私のサービスファイルには以下が含まれます。

[Unit]
Description=example Server
After=network.target

[Service]
Type=idle
ExecStart=/opt/xxx/xxx/sample.sh   
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

私が従ったステップは次のとおりです。

  1. デーモンを再ロードします。systemctl daemon-reload

  2. サービスを有効にする:systemctl enable sample

  3. サービスを開始します。systemctl start sample

  4. ヘルスチェック:service sample status、私のサービスが実行されていることを示します...

サービスがクラッシュまたは停止したら、自動的にサービスを開始したいと思います。

停止サービスを使用するとsystemctl stop sample自動的に起動しません。これを達成する方法についてのアイデアはありますか?

答え1

これは設定Restartが機能する方法ではありません。手動

システム操作(サービスの停止または再起動など)によってプロセスが終了した場合、サービスは再起動されません。

systemctlサービスが希望する状態を指定できます。つまり、systemctl startサービスを実行することを指定するか、systemctl stop実行しないことを指定します。その後、Systemdは要求された状態と一致するシステム状態を取得するために必要なアクションを実行します。

その目的Restartは要求されたシステム状態を維持することであり、すべての状況でサービスを実行し続けることではありません。

サービスが終了した場合、systemdがサービスを再起動することを確認するには、次のものが必要です。サービスメインプロセスを直接終了します。、systemdに停止を要求せずに、次のことを行います。

systemctl kill sample

関連情報