reboot multiple machines remotely
I need to reboot a number of machines remotely. Normally I just issue
for host in <hostlist>;do ssh ${host} 'sudo shutdown -r now';done
But I want give the users some time before the restart. However they ssh session won’t disconnect even if I use:
ssh -f 'sudo shutdown -r +5 &;disown'
I get an error message:
bash: -c: line 0: syntax error near unexpected token
;' bash: -c: line 0:
sudo shutdown -r +5 &;disown'
Any suggestions?
Solution 1:
As stated by the error message, you have a syntax error in your command. It is due to the slightly surprising fact that &
isn't part of a shell command but rather a separator between commands (like ;
is). Though both are command separators &
has an additional effect on the command on its left hand side. This certainly also confuse me sometimes, and I frequently make the same mistake. Once you know it, it is however easy to fix.
The fix is to not write &;
but rather just write one of the two separators depending on your intention. (And in most cases where one has written &;
the intention was to only write &
).
This should work:
ssh server 'sudo shutdown -r +5 & disown'