我向 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>
.