防止 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

autossh当您作为 systemd 服务运行时,默认情况下Type=simple,您不应使用-f带有 的选项autossh

如果您想继续使用该选项,您应该在服务定义中-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>.

相关内容