在服务器A上,我想通过ssh向服务器B发出以下命令。
service network stop sleep 5 service network start
问题是因为我发出一个networking“停止”,那么我当前的SSH连接也会丢失。 因此我不能执行后续命令(睡眠5和服务networking启动)。 请注意,我不能使用(服务networking重新启动)。
有没有人有这方面的解决方法/解决scheme?
如果您正在以交互方式进行此操作,为何不启动screen会话? 它看起来像这样:
screen
(scren shell启动)
service network restart
(SSH会话断开,但networking重新启动在屏幕会话中继续)
(等几秒钟)
(一旦重启完成,SSH回到主机)
screen -r
(重新连接到屏幕并检查错误)
恕我直言,远程重新启动networking接口总是吓人。 当它不回来时会发生什么? 如果有什么不好的事情发生,你是否有控制台或其他方式进入主机?
可用的确切命令根据Linux发行版而有所不同。 在相当标准的选项是安排和“在”工作5秒钟在未来重新启动networking。 另一个是使用nohup命令。
echo "sleep 5; /etc/init.d/networking start" | at now nohup sh -c 'sleep 5; /etc/init.d/networking start' &
其他发行版有daemon命令将生成的程序转换为不再与shell相关联的守护进程。
一个非常简单的方法是使用和运算符:
service network stop && sleep 5 && service network start
为什么不把它放到shell脚本中并通过SSH执行?
试试这个(如果需要,也许安装cron):
$ at now+5min at> service network stop at> sleep 5 at> service network start at> [control-D]
然后注销,等6分钟,然后重新login
这适用于现代的Debian和Ubuntu,而所有其他的答案将无法正常工作。
screen sudo ifdown --exclude=lo -a && sudo ifup --exclude=lo -a
请记住,可能需要一点点才能恢复界面。 在我的情况下约15秒,因为我有一个债券。
这听起来像你想要屏幕或tmux 。 这些将允许您通过丢失networking连接来保留会话。 他们真的非常有用,几乎所有的terminal会话都通过屏幕。