我正在使用的系统ssh用于远程连接到 Linux 机器。然后它执行单个 shell 命令并分析 shell 命令的输出。
如果我运行reboot,我会得到退出代码-1,因为重启当然会杀死 ssh 连接。0 以外的任何退出代码都会使系统注册失败,因此我一直在尝试编写一个单行命令,该命令将重新启动并ssh正常退出会话。
有问题的机器非常简单,重启实用程序不允许任何选项,所以我不能只安排稍后重启。
经过一番思考后,我尝试跑步
$ sleep 3 && reboot & exit
Run Code Online (Sandbox Code Playgroud)
当我手动调用它时有效:连接关闭并显示错误代码0,3 秒后机器重新启动。伟大的。
但是通过我们的系统运行的相同命令实际上并没有重新启动。它只返回退出代码 0,并且永远不会重新启动。
为什么会这样?
使用shutdown命令。
shutdown --reboot +1 "System is going down for reboot in 1 minute"
Run Code Online (Sandbox Code Playgroud)
我怀疑原因reboot不起作用是因为它需要一个 tty。您可以尝试使用后台 tty 运行它,但该shutdown命令具有您需要的一切,包括取消——正如它在回应中所说:
Shutdown scheduled for Thu 2018-02-22 15:19:33 MST, use 'shutdown -c' to cancel.
Run Code Online (Sandbox Code Playgroud)