远程重启多台机器

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

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: ;' bash: -c: line 0: sudo shutdown -r +5&; disown'

有什么build议么?

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

解决办法是不要写&; 而只是根据你的意图写两个分隔符中的一个。 (并且在大多数情况下,人们已经写了&;目的只是写& )。

这应该工作:

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