我想在系统启动时让系统自动建立到一个服务器的反向隧道,首先创建了/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中的最后一个启动?谢谢!
系统启动时systemd的与网络有关的问题求助
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
-
- 帖子: 318
- 注册时间: 2007-06-21 2:52
- astolia
- 论坛版主
- 帖子: 6703
- 注册时间: 2008-09-18 13:11
-
- 帖子: 318
- 注册时间: 2007-06-21 2:52
Re: 系统启动时systemd的与网络有关的问题求助
非常感谢,确实问题出在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命令确实可以看到启动的先后顺序,非常感谢。