systemctlが終了したときに子プロセスが失敗するのを防ぎます。

systemctlが終了したときに子プロセスが失敗するのを防ぎます。

systemdに1つのサービスを登録しました。

open_ssh.script

autossh -M 0 -L 8080:127.0.0.1:8080 -i .ssh/id_rsa USER@HOST -fN

auto_open_ssh.service

[Unit]
Description=SSH Tunnel Service
After=network.target

[Service]
ExecStart=open_ssh.script
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=default.target

サービスを実行した後、次のログを受け取ります。

Dec 29 11:07:41 ip-10-0-1-231.ap-southeast-1.compute.internal autossh[21036]: starting ssh (count 1)
Dec 29 11:07:41 ip-10-0-1-231.ap-southeast-1.compute.internal autossh[21036]: ssh child pid is 21046
Dec 29 11:07:41 ip-10-0-1-231.ap-southeast-1.compute.internal autossh[21036]: received signal to exit (15)

プロセスを確認しましたが、autosshが表示されませんでした。サービスが終了し、子プロセス(autossh)が自動的に終了したようです。 autosshが終了するのを防ぎますか?

答え1

autosshsystemdサービスとして実行している場合は、デフォルトでオプションをType=simple使用しないでください。-fautossh

このオプションを引き続き使用するには、サービス定義に追加する必要があります-fType=forking

また、これを次のように使用する場合システムサービス(つまり、次に追加してくださいauto_open_ssh.service。)特に指定しないと、/etc/systemd/system/autosshが起動され、現在の作業ディレクトリがに設定されるため、SSHキーファイルのフルパスを使用する必要があります。/

本サービスを次のように利用する場合ユーザーサービス(で構成されています~/.config/systemd/user/auto_open_ssh.service)は、systemdを使用してログアウトしたときにユーザーアカウントがプロセスを実行し続けない限り、最後のセッションからログアウトしたときにユーザーサービスを停止しますloginctl enable-linger <your_username>

関連情報