![通过 ssh 重新启动远程服务器时,bash 脚本意外退出](https://linux22.com/image/999878/%E9%80%9A%E8%BF%87%20ssh%20%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%97%B6%EF%BC%8Cbash%20%E8%84%9A%E6%9C%AC%E6%84%8F%E5%A4%96%E9%80%80%E5%87%BA.png)
我有一个 bash 脚本(在本地机器上),其中有以下行
ssh root@remoteip "some commands; shutdown -r now"
#do other things
但是,在此行之后(远程服务器已成功重启),整个 bash 脚本就退出了(“执行其他操作”未执行)。
如何解决这个问题?
答案1
在后台运行该shutdown
命令,这对我来说完成了工作:
#!/bin/bash
ssh root@remote-ip "some-command > /dev/null; shutdown -r now &"
uname -a
some-command > /dev/null
:运行some-command
并将输出重定向到/dev/null
,所以我没有得到任何输出,正如你所说。shutdown -r now &
:shutdown
在后台运行命令并离开 shell 以获取进一步的命令。uname
是#do other things
为了测试目的,它将在远程系统关闭后立即执行;)不会等待它完成)。
还有其他方法也可以实现此结果,例如您可以在后台运行整个命令:
ssh root@remote-ip "some-command > /dev/null; shutdown -r now" &
或者在子 shell 中运行它:
$(ssh root@remote-ip "some-command; shutdown -r now")
虽然我建议第一个,即shutdown
在远程机器的后台运行该命令。