Как я могу использовать ssh для запуска команды на удаленной машине Unix и выхода до ее завершения?

24965
Richard Hoskins

Как я могу использовать ssh для запуска команды на компьютере с Unix и выхода до ее завершения?

Например, если я наберу

ssh localhost 'sleep 60 &' 

ssh висит на моем терминале, пока сон не завершится, хотя сон работает в фоновом режиме.

13
Вы, вероятно, хотите `&` вне кавычек. Brad Gilbert 12 лет назад 0
Нет, это просто помещает весь набор и kaboodle на задний план, и я не могу набрать свой пароль. Richard Hoskins 12 лет назад 1

3 ответа на вопрос

17
Martin

SSH имеет ключ -f, который делает то же самое, что и использование nohup на вашем клиенте, но позволяет ssh запрашивать пароль. Используйте это так:

ssh localhost -f 'command' 

Но : SSH по-прежнему будет работать в фоновом режиме, поэтому, если вы выключите клиент до завершения выполнения команды на сервере, он будет прерван. Если вы хотите, чтобы соединение ssh было закрыто после выполнения команды, вы можете использовать экран на стороне сервера:

ssh localhost -f 'screen -d -m sleep 60' 
Если я выполняю длинную команду 'ssh remotemachine -n'> withremoteredirects 2> & 1 Richard Hoskins 12 лет назад 0
Афаик нет. Если соединения ssh потеряны, демон ssh должен завершить все терминалы «внутри» ssh. С тех пор, как терминал запустил команду, они будут прерваны, так как их родительский процесс завершен. Но стоит попробовать;) Martin 12 лет назад 0
А как насчет «nohup» вместо «screen» на стороне сервера? Richard Hoskins 12 лет назад 0
@ Брэд Гилберт. Ничего? Я могу думать о нескольких вещах, но одна вещь, которая не имеет общего, состоит в том, что «экран» доступен не на всех компьютерах POSIX. Richard Hoskins 12 лет назад 0
http://www.gnu.org/software/screen/manual/ Brad Gilbert 12 лет назад 0
`screen` и` nohup` используются по-разному. Вы не можете присоединиться к сеансу nohup, только посмотреть, что он сделал. Brad Gilbert 12 лет назад 0
@ Брэд Гилберт, я знаю. Экран не всегда доступен, и в любом случае он использовался в примере, чтобы предотвратить прерывание сна при закрытии соединения ssh. Richard Hoskins 12 лет назад 0
6
neu242

Используйте перенаправление nohup, stdout / stderr и выполните команду в фоновом режиме:

 nohup ssh localhost 'sleep 60' >/dev/null 2>/dev/null & 

РЕДАКТИРОВАТЬ: Или даже лучше, просто используйте параметр sf sf:

ssh -f localhost 'sleep 60' 
Возможно, вы могли бы объединить два перенаправления с `&> / dev / null`. Brad Gilbert 12 лет назад 0
@BradGilbert Этот синтаксис не POSIX-совместимый; трудно спорить о том, чтобы пожертвовать совместимостью, чтобы сохранить несколько символов. tripleee 3 года назад 0
2
Arjan

Или после входа в систему с помощью ssh, начните, screenесли вы хотите вернуться позже, чтобы посмотреть на прогресс или вывод.

Вы также можете использовать «tmux», который мне лично проще настроить. Оба приложения в значительной степени эквивалентны, у каждого есть свои плюсы и минусы. mzuther 5 лет назад 0