Назад | Перейти на главную страницу

перезагружать несколько машин удаленно

Мне нужно удаленно перезагрузить несколько машин. Обычно я просто выдаю

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'