远程重启多台机器

Hor*_*ace 11 ssh bash

我需要远程重启多台机器。通常我只是发出

for host in <hostlist>;do ssh ${host} 'sudo shutdown -r now';done
Run Code Online (Sandbox Code Playgroud)

但我想在重启前给用户一些时间。但是,即使我使用,他们的 ssh 会话也不会断开连接:

ssh -f 'sudo shutdown -r +5 &;disown'
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息:

bash: -c: line 0: 意外标记附近的语法错误;' bash: -c: line 0:sudo shutdown -r +5 &;disown'

有什么建议?

kas*_*erd 31

如错误消息所述,您的命令中有语法错误。这是由于一个稍微令人惊讶的事实,&它不是 shell 命令的一部分,而是命令之间的分隔符(如;is)。虽然两者都是命令分隔符&,但对其左侧的命令有额外的影响。这当然有时也让我感到困惑,我经常犯同样的错误。一旦你知道它,它很容易修复。

解决方法是不写&;,而只是根据您的意图写两个分隔符之一。(并且在大多数情况下,一个人写&;的意图是只写&)。

这应该有效:

ssh server 'sudo shutdown -r +5 & disown'
Run Code Online (Sandbox Code Playgroud)

  • 你赢得了今天的奖项,因为我教了我 25 年对 UNIX 的抨击后我不知道的东西。还有+1! (7认同)