Как подключиться к ubuntu через ssh, выполнить скрипт, а затем выйти из ssh, пока скрипт все еще работает на удаленном хосте? [dубликат]

Скажем, я запускаю кучу процессов из сеанса ssh. Можно ли завершить сеанс ssh, сохраняя эти процессы на удаленном компьютере?

131
задан 21 October 2010 в 17:09

13 ответов

Вы должны искать современные альтернативы, такие как tmux.

tmux по многим причинам превосходит screen, вот лишь некоторые примеры:

Windows может быть перемещается между сеансом и даже привязывается к нескольким сеансам. Окна могут быть разделены горизонтально и вертикально на панели. Поддержка терминалов UTF-8 и 256. Сессии можно управлять из оболочки без необходимости вводить сеанс

. Базовая функциональность

Чтобы получить те же функциональные возможности, что объяснены в ответе, рекомендующем screen, вам нужно будет сделать следующее:

Windows может быть перемещена между сеансами и даже связана с несколько сеансов запустите tmux, введя tmux в оболочку . Windows можно разделить горизонтально и вертикально на панели оставить / отсоединить сеанс tmux, набрав Ctrl + b, а затем d

Теперь вы можете безопасно выйти из удаленного компьютера, ваш процесс будет работать внутри tmux. Когда вы вернетесь назад и хотите проверить статус своего процесса, вы можете использовать tmux attach для присоединения к сеансу tmux.

Если вы хотите, чтобы несколько сеансов работали бок о бок, вы должны назвать каждый сеанс, используя Ctrl + b и $. Вы можете получить список текущих запущенных сеансов с помощью tmux list-sessions.

tmux может выполнять гораздо более сложные действия, чем обрабатывать одно окно за один сеанс. Для получения дополнительной информации см. [F15] или ответ . В частности, здесь часто задаются вопросы об основных отличиях между screen и tmux.

563
ответ дан 18 July 2018 в 10:17

Вместо:

cmd options;

Добавить перед nohup:

nohup cmd options &

Затем вы сможете увидеть консольный stdout:

tail -f nohup.out
-1
ответ дан 18 July 2018 в 10:17

Самый лучший способ - это самый простой способ.

nohup long-running-command &

Это было сделано специально для этого, оно даже записывает stdout в nohup.log

man nohup

If вы хотите «зафрахтовать» некоторые уже запущенные задачи, тогда ваш лучший выбор - ctrl + z, а затем запустите

bg (это будет фоном вашей последней приостановленной задачи, позволяющей продолжить работу)

, тогда быстрый disown должен продолжать работать после выхода из системы.

screen и другие могут это сделать, но это не то, для чего они предназначены. Я рекомендую nohup для задач, которые, как вы знаете, собираетесь оставить, и bg для задач, которые вы уже выполняете, и не хотите повторно запускать.

Имейте в виду, что оба имеют значение bash. Если вы не используете bash, тогда команды могут быть разными.

206
ответ дан 18 July 2018 в 10:17

Я застрял в большом mv, поэтому я не смог остановить процесс, настроить экран и снова запустить его. Мне удалось выйти из сеанса ssh с запущенным процессом, выполнив следующие шаги:

Команда ssh [server] CTRL + Z bg disown exit

Шаг 3 приостанавливает текущий процесс ( например, моя команда «mv»). Шаг 4 ставит приостановленный процесс на задний план и возобновляет его. Шаг 5 позволяет отказаться от процесса.

33
ответ дан 18 July 2018 в 10:17

Самый простой способ - запустить команду в фоновом режиме с помощью &. Затем просто напишите:

disown -a
2
ответ дан 18 July 2018 в 10:17

В то время как все говорят использовать disown (единственный вариант, который у вас есть после того, как вы уже начали процесс), nohup или даже запустить команду в screen, что полезно, если вы хотите увидеть весь вывод из команды ... Я поклонник screen .. Я все еще пробовал самые последние распространенные дистрибутивы Linux и просто помещал задание в фоновом режиме и уходил, не вызывая все процессы, которые работают, чтобы умереть. Должна быть глобальная установка или что-то еще. Я пытаюсь это на некоторых довольно старых системах (slackware 12), и мой тестовый скрипт работает до тех пор, пока я не рунет его вручную:

shell$ cat > test.pl #!/usr/bin/perl while(1){ sleep(1); } shell$ perl ./test.pl & shell$ exit logout shell$ ps aux test.pl mymom 31337 1 0 13:25 ? 00:00:00 perl ./test.pl shell$

Пока я согласен, что screen будет лучшим способом запускать это, даже если мой скрипт написал файлы журналов или что-то еще. Мне никогда не приходилось использовать disown -a или nohup, если он не был полностью паранойей. Может быть, кто-то может пролить свет на то, как bash ведет себя по умолчанию? Может быть, некоторые системные администраторы меняют значения по умолчанию на больших оболочках, чтобы процессы своих пользователей перегружали систему?

0
ответ дан 18 July 2018 в 10:17

Эй, пока я согласился, что экран является наиболее эффективным вариантом. Вы можете использовать vncserver, а затем запустить процесс на нем.

Кроме того, если ваши единственные проблемы состоят в том, чтобы запустить процесс и не нужно брать его обратно, и, самое главное, вы не знали, что будете нужно закрыть сеанс, и у вас уже запущен процесс, вам не повезло, если вы использовали bash в качестве оболочки

Сначала вам нужно отправить процесс на задний план, набрав Ctrl + Z, а затем bg% 1 (число зависит от номера задания, обычно это 1, но вы можете легко вытащить список с помощью заданий команды)

Наконец, вызывается команда disown (за ней следует jobid ... так же, как и с bg)

Это приведет к удалению отношения родитель-потомок между вашей оболочкой и процессом в фоновом режиме, предотвращая ее смерть, когда ваша оболочка будет завершена.

7
ответ дан 18 July 2018 в 10:17

Экран и nohup - лучший способ, но если вам нужно отключить процесс, уже запущенный без экрана или nohup, вы можете запустить команду disown.

disown [-ar] [-h] [ jobspec … | pid … ] Без параметров удалите каждую спецификацию из таблицы активных заданий. Если задана опция -h, задание не удаляется из таблицы, но отмечено так, что SIGHUP не отправляется заданию, если оболочка получает SIGHUP. Если jobspec нет, и не предоставляется опция -a или -r, используется текущее задание. Если задание не задано, опция -a означает удаление или отметку всех заданий; параметр -r без аргумента jobspec ограничивает операцию выполнением заданий.

С отключением вы можете закрыть терминал и запустить процесс на машине.

70
ответ дан 18 July 2018 в 10:17

Самый простой ответ ...

ctrl + z приостанавливает запущенную программу

«bg» запустит ее в фоновом режиме

2
ответ дан 18 July 2018 в 10:17

Существуют две основные программы, которые вы можете использовать для поддержки программ и состояния терминала по нескольким ssh-соединениям. Они - экран (действующий, но, к сожалению, незапятнанный. По-видимому, сейчас активно развивается) и tmux (новее, активно поддерживается). Byobu - это интерфейс, который может работать поверх их этих систем и предоставлять дополнительную информацию о состоянии Ubuntu. В новых установках он будет использовать tmux в качестве бэкэнд, если у вас установлена ​​более старая установка byobu и существующая конфигурация, она будет поддерживать предыдущий бэкэнд, будь то экран или tmux.

Byobu

Byobu можно установить на компьютер, выполнив это на машине на базе Debian:

sudo aptitude install byobu

Используя yum, вы делаете

su -c 'yum install byobu'

Также возможно установить byobu on другие дистрибутивы.

Использование byobu

Вы можете запустить byobu, запустив byobu на главной машине после подключения с помощью ssh. Это даст вам оболочку, которая выглядит так:

Вы также можете использовать терминал Byobu на машине Ubuntu с опцией -X и легко иметь идеальное рабочее beobu.

Использование:

Начать byobu, набрав byobu.

Вы можете нажать F2, чтобы создать новое окно в текущем сеансе, F3-F4, чтобы переключаться между различными windows.

. Лучше всего использовать byobu, вам не нужно фактически убивать процессы, запущенные в терминале, чтобы покинуть терминал. Вы можете просто отправить экран / tmux (скелет byobu) на задний план и возобновить следующий приезд:

Чтобы выйти из bobobu и keeep, он работает (отсоединяется), нажимайте F6. В следующий раз, когда вы придете, просто сделайте byobu, и вы сразу вернетесь туда, где вы были.

Вы также можете создавать различные сеансы byobu с помощью byobu -S session1 и т. д. И вы можете подключиться к любому из них, когда вернетесь.

Вы можете сделать гораздо больше, используя Byobu. Используй это! Некоторые окончательные руководства активно развиваются сейчас , здесь или здесь.

19
ответ дан 18 July 2018 в 10:17

Вы должны проверить экран GNU и посмотреть, поможет ли он вам. В зависимости от того, как вам нужно приложение для запуска в реальном времени, это может вызвать больше проблем, чем оно решает, но по крайней мере это позволит вам возобновить сеанс, как будто вы его никогда не покидали.

Как использовать:

Используйте команду screen для первого запуска, прокрутите вводные сообщения, вам нужно передать терминал. C-a C-c открывает еще один терминал C-a C-k убивает терминал Вы можете использовать C-C-Space и C-C-Backspace для циклического перехода через терминалы C-a C-a удобно, если вы в основном используете только два терминала C-a C-d отсоединяет текущий сеанс экрана и выходит из экранов. Затем вы можете использовать screen -r для возобновления этого сеанса. У вас может быть несколько отдельных сеансов экрана одновременно, в этом случае вам будет показан список доступных сеансов.

Есть много других опций, например разделенные экраны, а также все ярлыки полностью настраиваются.

3
ответ дан 18 July 2018 в 10:17

Для одного сценария оболочки, который у меня работает в течение длительного периода времени, я войду в систему и запустил процесс в фоновом режиме, используя «& amp;».

Пример:

/path/to/my/script &

Я вышел из системы и отключил сеанс SSH. Когда я вхожу в систему через некоторое время, сценарий все еще выполняется, как доказано непрерывным сбором данных из сценария.

7
ответ дан 18 July 2018 в 10:17

Вы не можете сделать это, как только процесс запустится, вам нужно настроить все, прежде чем запускать долгое задание.

Вы можете использовать nohup, но современная мудрость подсказывает, что вы используете экран или byobu как ваш войдите в систему, чтобы вы могли отсоединиться и уйти от работы.

Экран имеет то преимущество, что вы можете отсоединиться от одной машины и снова подключиться к другой, что удобно, если вы хотите проверить длительные процессы, которые выходят за пределы рабочего дня.

Существует разумное начало работы nohup здесь.

byobu ставит простой в использовании интерфейс поверх экрана с меню и т. Д. Это также текущая реализация экрана на более новой ubuntu. F2 для запуска нового терминала F3 / F4 для переключения взад и вперед и F6 для разъединения. Регулярно завершайте вывод на конечные терминалы.

16
ответ дан 18 July 2018 в 10:17

Другие вопросы по тегам:

Похожие вопросы: