系统启动时systemd的与网络有关的问题求助

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
xhsh
帖子: 318
注册时间: 2007-06-21 2:52

系统启动时systemd的与网络有关的问题求助

#1

帖子 xhsh » 2019-11-07 16:15

我想在系统启动时让系统自动建立到一个服务器的反向隧道,首先创建了/etc/systemd/system/autossh.service文件,其内容为:

[Unit]
Description= autossh

[Service]
ExecStart=/bin/sh /usr/local/bin/autossh.sh
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
After=network-online.target
Wants=network-online.target

其中要执行的脚本/usr/local/bin/autossh.sh里的命令是:

/bin/su -c 'ssh -CNfg -R 3583:127.0.0.1:22 [email protected]' - xhsh

测试时,直接运行systemctl start autossh.service成功,可以在实现在服务器上通过端口3583实现反向登陆我自己的机器。然而重启机器时,则提示Network is not reachable. 我怀疑是因为在启动这个服务时,系统网络还没准备好。请问After=和Wants=后面怎么写才能在系统的网络准备好后才开始启动这项服务?或者,systemd最后启动的服务是什么,以便我能把我的autossh服务放在systemd中的最后一个启动?谢谢!
头像
astolia
论坛版主
帖子: 6703
注册时间: 2008-09-18 13:11

Re: 系统启动时systemd的与网络有关的问题求助

#2

帖子 astolia » 2019-11-07 18:06

你还没有启用吧

代码: 全选

sudo systemctl enable autossh
启动顺序可以用systemd-analyze看

代码: 全选

systemd-analyze plot > a.svg
还有After在[Install]里是无效的,该写到[Unit]里
xhsh
帖子: 318
注册时间: 2007-06-21 2:52

Re: 系统启动时systemd的与网络有关的问题求助

#3

帖子 xhsh » 2019-11-08 9:11

astolia 写了: 2019-11-07 18:06 你还没有启用吧

代码: 全选

sudo systemctl enable autossh
启动顺序可以用systemd-analyze看

代码: 全选

systemd-analyze plot > a.svg
还有After在[Install]里是无效的,该写到[Unit]里
非常感谢,确实问题出在After=的位置不对,应该放在[Unit]里,完整的正确的文件是:

[Unit]
Description= autossh
After=NetworkManager-wait-online.service
Wants=NetworkManager-wait-online.service

[Service]
ExecStart=/bin/sh /usr/local/bin/autossh.sh
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

不过现在找到了一个办法,可以不要After=和Wants=了,只要在要执行的脚本文件/usr/local/bin/autossh.sh第一行前面插入sleep 120,等待两分钟,然后再开始执行下面的命令,这时候,网络就已经准备好了,就可以通过ssh登陆其它服务器了。原因是,由systemd管理的各个service默认都是同步启动,除非里面有After=和Required=等语句改变某些service的先后顺序。当在脚本中加入sleep 120,网络启动的service和自定义的autossh.service同步启动,但等脚本中的sleep命令执行完毕,网络早已经启动起来了。

推荐的systemd-analyze命令确实可以看到启动的先后顺序,非常感谢。
回复