远程重启多台机器

远程重启多台机器

我需要远程重启一些机器。通常我只需要执行

for host in <hostlist>;do ssh ${host} 'sudo shutdown -r now';done

但我想在重启之前给用户一些时间。然而,即使我使用以下命令,他们的 ssh 会话也不会断开:

ssh -f 'sudo shutdown -r +5 &;disown'

我收到一条错误消息:

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

有什么建议么?

答案1

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

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

这应该有效:

ssh server 'sudo shutdown -r +5 & disown'

相关内容