autossh 系统脚本在启动时失败,在 systemctl 重新启动时有效

autossh 系统脚本在启动时失败,在 systemctl 重新启动时有效

我正在尝试设置 autossh 服务,以便在监控服务器启动时将端口转发到远程服务器。经过一番欺骗之后,我得到了一个相当准系统的系统脚本,但有一个问题。该服务在引导运行时无法正常启动,但在手动启动或重新启动后立即重新启动时可以正常启动。

Description=AutoSSH tunnel service for Grafana to access mariadb on remote; local port 33060
After=network-online.target

[Service]
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -M 0 -N [email protected] -i /home/myuser/.ssh/id_rsa -o \"ServerAliveInterval 30\" -o \"ServerAliveCountMax 3\" -L 172.17.0.1:33307:127.0.0.1:3306

[Install]
WantedBy=multi-user.target

启动时,无法连接。 Journalctl 的输出类似于:

-- 
-- The job identifier is 152.
Apr 07 15:25:31 monitoring autossh[752]: port set to 0, monitoring disabled
Apr 07 15:25:31 monitoring autossh[752]: starting ssh (count 1)
Apr 07 15:25:31 monitoring autossh[752]: ssh child pid is 759
Apr 07 15:25:31 monitoring autossh[759]: bind [172.17.0.1]:33307: Cannot assign requested address
Apr 07 15:25:31 monitoring autossh[759]: channel_setup_fwd_listener_tcpip: cannot listen to port: 33307
Apr 07 15:25:31 monitoring autossh[759]: Could not request local forwarding.

如果我立即 sudo systemctl restart autossh-mariadb-tunnel.service,连接工作正常。

答案1

嘘。虽然我花了一个多小时在这里仔细研究问题和答案,并查看duckduckgo结果,但当我提交问题时,答案就给了我答案。线索就在绑定地址中:172.17.0.1 是一个 docker 接口。问题是我正在监听 docker 接口,但从未告诉脚本等待 docker。

所以,我将第2行修改为

After=network-online.target docker.service

重新启动后,一切都按预期进行。

相关内容