Мне нужно удаленно перезагрузить несколько машин. Обычно я просто выдаю
for host in <hostlist>;do ssh ${host} 'sudo shutdown -r now';done
Но я хочу дать пользователям время перед перезапуском. Однако их сеанс ssh не отключится, даже если я использую:
ssh -f 'sudo shutdown -r +5 &;disown'
Я получаю сообщение об ошибке:
bash: -c: line 0: синтаксическая ошибка возле неожиданного токена
;' bash: -c: line 0:
sudo shutdown -r +5 &; отклонить '
Какие-либо предложения?
Как указано в сообщении об ошибке, у вас есть синтаксическая ошибка в вашей команде. Это связано с немного удивительным фактом, что &
не является частью команды оболочки, а является разделителем между командами (например, ;
является). Хотя оба являются разделителями команд &
имеет дополнительный эффект на команду в левой части. Это, конечно, иногда меня сбивает с толку, и я часто совершаю ту же ошибку. Однако, как только вы это узнаете, это легко исправить.
Исправление - не писать &;
а лучше просто напишите один из двух разделителей в зависимости от вашего намерения. (И в большинстве случаев, когда написано &;
намерение состояло в том, чтобы написать &
).
Это должно работать:
ssh server 'sudo shutdown -r +5 & disown'