Предположим, что я запускаю кучу процессов из сеанса ssh. Можно ли завершить сеанс ssh, сохранив эти процессы на удаленном компьютере?
Предположим, что я запускаю кучу процессов из сеанса ssh. Можно ли завершить сеанс ssh, сохранив эти процессы на удаленном компьютере?
Вы должны искать современные альтернативы, такие как tmux
.
tmux
по многим причинам превосходит screen
, вот лишь некоторые примеры:
Чтобы получить те же функции, что описаны в ответах , рекомендующих screen
, вам нужно будет сделать следующее: р>
tmux
, набрав tmux
в оболочку tmux
tmux
, набрав Ctrl + b , а затем d Теперь вы можете безопасно выйти из удаленного компьютера, ваш процесс будет работать внутри tmux
. Когда вы вернетесь назад и хотите проверить статус своего процесса, вы можете использовать tmux attach
для присоединения к вашей сессии tmux
.
Если вы хотите, чтобы несколько сеансов работали бок о бок, вы должны называть каждый сеанс, используя Ctrl + b и $
. Вы можете получить список текущих запущенных сеансов, используя tmux list-sessions
.
tmux
может выполнять гораздо более сложные действия, чем обрабатывать одно окно за один сеанс. Для получения дополнительной информации см. Страницу man tmux
или страницы tmux GitHub . В частности, здесь часто задаваемые вопросы об основных различиях между screen
и tmux
.
Самый лучший способ - это самый простой способ. Р>
nohup long-running-command &
р>
Это было сделано специально для этого, он даже записывает stdout в nohup.log
man nohup
р>
Если вы хотите «зафрахтовать» некоторые уже запущенные задачи, тогда ваш лучший выбор - ctrl + z, затем запустите
bg
(это будет фоном вашей последней приостановленной задачи, позволяющей продолжить работу)
, то быстрый disown
должен продолжать выполнение процесса после выхода из системы. Р>
screen
, а другие могут это сделать, но это не то, для чего они предназначены. Я рекомендую nohup
для задач, которые, как вы знаете, собираетесь оставить, и bg
для задач, которые уже запущены и не хотят перезапускать. Р>
Имейте в виду, что оба имеют значение bash. Если вы не используете bash, команды могут быть разными.
Вы можете сделать это, используя screen
.
Введите man screen
, чтобы узнать больше или прочитать эту страницу экранной страницы . р>
Простой сценарий:
ssh в удаленном поле. Введите screen
Затем запустите процесс, который вы хотите.
Нажмите Ctrl - A , затем Ctrl - D . Это будет «отсоединять» сеанс экрана, но оставит ваши процессы запущенными. Теперь вы можете выйти из удаленного окна.
Если вы хотите вернуться позже, снова войдите в систему и наберите screen -r
. Это «возобновит» сеанс экрана, и вы сможете увидеть результаты своего процесса.
Экран и nohup - лучший способ, но если вам нужно отключить процесс, уже запущенный без экрана или nohup, вы можете запустить команду disout.
disown [-ar] [-h] [
<я>jobspec
… |
<я>pid
… ]
р>Без параметров удалите каждый jobspec из таблицы активных заданий. Если задана опция
-h
, задание не удаляется из таблицы, но помечено так, что SIGHUP не отправляется заданию, если оболочка получает SIGHUP. Если jobspec нет, и не предоставляется опция-a
или-r
, используется текущее задание. Если не задано jobspec , параметр-a
означает удаление или отметку всех заданий; параметр-r
без аргумента jobspec ограничивает выполнение рабочих заданий.
С отключением вы можете закрыть терминал и запустить процесс на машине.
Существуют две основные программы, которые вы можете использовать для поддержки программ и состояния терминала по нескольким соединениям ssh. Они - экран (действующий, но, к сожалению, не имеющий силы. По-видимому активно развивается сейчас ) и tmux (более новый, активно поддерживается). Byobu - это интерфейс, который может работать поверх их этих систем и предоставлять дополнительную информацию о состоянии Ubuntu. В новых установках он будет использовать tmux в качестве бэкэнд, если у вас установлена более старая установка byobu и существующая конфигурация, она будет поддерживать предыдущий бэкэнд, будь то экран или tmux.
Byobu можно установить на компьютер, выполнив это на машине на базе Debian:
sudo aptitude install byobu
Используя yum, вы делаете
su -c 'yum install byobu'
Также можно установить byobu в других дистрибутивах.
Вы можете запустить byobu, выполнив byobu
на главной машине после подключения с помощью ssh.
Это даст вам оболочку, которая выглядит так:
Вы также можете использовать терминал Byobu на машине Ubuntu с опцией -X и легко иметь идеальную работу byobu.
Запустите byobu, набрав byobu
.
Вы можете нажать F2, чтобы создать новое окно в текущем сеансе, F3-F4, чтобы переключаться между различными окнами.
Лучшая часть byobobu - вам не нужно фактически убивать процессы, запущенные в терминале, чтобы покинуть терминал. Вы можете просто отправить экран / tmux (скелет byobu) на задний план и возобновить следующий приход:
В следующий раз, когда вы придете, просто сделайте byobu
, и вы вернетесь туда, где вы были.
Вы также можете создавать различные сеансы byobu byobu -S session1
и т. д. И вы можете подключиться к любому из них, когда вернетесь.
Вы можете сделать гораздо больше, используя Byobu. Используй это! Некоторые окончательные руководства здесь , здесь или здесь . р>
Вы не можете сделать это, как только процесс начнется, вам нужно настроить все, прежде чем запускать долгое задание.
Вы можете использовать nohup , но современная мудрость подсказывает, что вы используете экран или byobu как ваш логин, чтобы вы могли отсоединять и оставлять вещи Бег. Р>
Экран имеет то преимущество, что вы можете отсоединиться от одной машины и снова подключиться к другой, что удобно, если вы хотите проверить длительные процессы, которые выходят за пределы рабочего дня.
Существует разумное начало работы руководство по экрану здесь.
byobu предоставляет простой в использовании интерфейс поверх экрана с меню и т. д. Это также текущая реализация экрана на более новой ubuntu. F2 для запуска нового терминала F3 / F4 для переключения взад и вперед и F6 для разъединения. Типовой вывод на конечные терминалы навсегда.
Я застрял в большом mv, поэтому я не смог остановить процесс, настроить экран и снова запустить его. Мне удалось выйти из сеанса ssh с запущенным процессом, выполнив следующие шаги:
Шаг 3 приостанавливает текущий процесс (например, моя команда «mv»). Шаг 4 ставит приостановленный процесс на задний план и возобновляет его. Шаг 5 позволяет отказаться от процесса.
Эй, пока я согласился, что экран - самый эффективный вариант. Вы можете использовать vncserver, а затем запустить процесс на нем.
Также, если ваши единственные проблемы состоят в том, чтобы запустить процесс и не нужно брать его обратно, и, самое главное, вы не знали, что вам нужно будет закрыть сеанс, и у вас уже запущен процесс, вы не удачи, если вы использовали bash в качестве оболочки
Сначала вам нужно отправить процесс на задний план, набрав Ctrl + Z, а затем bg% 1 (число зависит от номера задания, обычно это 1, но вы можете легко вывести список с помощью заданий команды) р>
Наконец, вызывается команда disown (за которой следует jobid ... то же, что и с командой bg)
Это приведет к отключению отношения родитель-потомок между вашей оболочкой и процессом в фоновом режиме, что предотвратит ее смерть, когда ваша оболочка будет завершена.
Для одного сценария оболочки, который у меня работает в течение длительного периода времени, я войду в систему и запустил процесс в фоновом режиме с помощью «& amp;».
Пример: р>
/path/to/my/script &
Я вышел из системы и отключил сеанс SSH. Когда я вхожу в систему через некоторое время, сценарий все еще выполняется, как доказано непрерывным сбором данных из сценария. Р>
Вы должны проверить экран GNU и посмотреть, помогает ли он вам. В зависимости от того, как вам нужно приложение для запуска в реальном времени, оно может вызвать больше проблем, чем оно решает, но по крайней мере это позволит вам возобновить сеанс, как будто вы его никогда не покидали.
Как использовать:
screen
для первого запуска, прокрутите вводные сообщения, вам нужно передать терминал. screen -r
для возобновления этого сеанса. У вас может быть несколько отдельных сеансов экрана одновременно, в этом случае вам будет показан список доступных сеансов. Есть много других опций, например разделенные экраны, а также все ярлыки полностью настраиваются.
Самый простой способ - запустить команду в фоновом режиме с помощью &
. Затем просто напишите:
disown -a
Самый простой ответ ...
ctrl + z приостанавливает запущенную программу
"bg" запустит его в фоновом режиме
В то время как все говорят использовать 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 ведет себя по умолчанию? Может быть, некоторые системные администраторы меняют значения по умолчанию на больших оболочках, чтобы процессы своих пользователей перегружали систему? Р>
Вместо:
cmd options;
Добавить до nohup
:
nohup cmd options &
Затем вы сможете увидеть консоль stdout:
tail -f nohup.out