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