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

이 옵션을 계속 사용하려면 서비스 정의에 추가해야 합니다 -f.Type=forking

또한 이것을 다음과 같이 사용하는 경우시스템 서비스(즉, 다음에 추가하세요 auto_open_ssh.service.) 별도로 지정하지 않으면 /etc/systemd/system/autossh가 시작되고 현재 작업 디렉터리가 로 설정되므로 SSH 키 파일의 전체 경로를 사용해야 합니다./

본 서비스를 다음과 같이 이용하는 경우사용자 서비스(에서 구성됨 ~/.config/systemd/user/auto_open_ssh.service)은 systemd를 사용하여 로그아웃할 때 사용자 계정이 프로세스를 계속 실행하도록 허용하지 않는 한 마지막 세션에서 로그아웃할 때 사용자 서비스를 중지합니다 loginctl enable-linger <your_username>.

관련 정보