reinicia várias máquinas remotamente

10

Eu preciso reiniciar várias máquinas remotamente. Normalmente eu apenas emito

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

Mas quero dar aos usuários algum tempo antes do reinício. No entanto, a sessão ssh não será desconectada, mesmo se eu usar:

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

Recebo uma mensagem de erro:

bash: -c: line 0: syntax error near unexpected token ;' bash: -c: line 0:sudo shutdown -r +5 &;disown'

Alguma sugestão?

    
por Horace 05.02.2015 / 00:03

1 resposta

30

Como afirma a mensagem de erro, você tem um erro de sintaxe no seu comando. É devido ao fato ligeiramente surpreendente de que & não faz parte de um comando shell, mas sim um separador entre comandos (como ; is). Embora ambos sejam separadores de comando, & tem um efeito adicional no comando do lado esquerdo. Isso certamente também me confunde às vezes, e freqüentemente cometo o mesmo erro. Uma vez que você sabe, é fácil de corrigir.

A correção é não escrever &; , mas apenas escrever um dos dois separadores, dependendo da sua intenção. (E na maioria dos casos em que alguém escreveu &; , a intenção era apenas escrever & ).

Isso deve funcionar:

ssh server 'sudo shutdown -r +5 & disown'
    
por 05.02.2015 / 00:15

Tags