Можно ли продолжить сеанс ssh при каждом повторном подключении? [dубликат]

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

gksu nvidia-settings

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

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

92 ответа

Вы должны искать современные альтернативы, такие как 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.

569
ответ дан 25 July 2018 в 18:48
  • 1
    @CraigM Используйте screen -x -r [screenname] или screen -rx для краткости, если активен только один сеанс экрана. Это позволяет прикрепить существующий экземпляр экрана. – Lekensteyn 25 November 2012 в 16:31
  • 2
    Этот совет помог мне с той же проблемой, но я думаю, что она включает опечатку. Я уверен, что вам нужно ввести Ctrl-b, а затем d, чтобы оставить / отсоединить сеанс tmux. Конечно, это имеет место для версии tmux на моем Ubuntu 12.04. – cxrodgers 25 December 2012 в 14:31
  • 3
    Я сделал ошибку, следуя приведенным выше инструкциям. Я поделюсь им, если кто-то может попасть в ту же ошибку: я начал использовать tmux в оболочке моего собственного компьютера вместо оболочки удаленного компьютера. Нужно запустить tmux в оболочке удаленного компьютера. – Mert Nuhoglu 22 August 2014 в 19:53
  • 4
    Экран теперь разрабатывается снова: lists.gnu.org/archive/html/screen-devel/2014-04/msg00024.html Не могли бы вы обновить свой ответ? – muru 3 November 2014 в 07:27
  • 5
    Кроме того, запустите tmux detach вместо ввода ctrl-b d – Andrew MacFie 4 November 2015 в 02:51

Вы должны искать современные альтернативы, такие как 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.

573
ответ дан 2 August 2018 в 00:57

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

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

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

Основные функции

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

  • ssh в удаленную машину
  • запустите tmux , введя tmux в оболочку
  • запустите процесс, который вы хотите в запущенном tmux session
  • оставить / отсоединить сеанс tmux , набрав Ctrl + b, а затем d

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

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

tmux может делать гораздо более сложные вещи, чем обрабатывать одно окно в один сеанс. Для получения дополнительной информации смотрите man tmux или страницу tmux GitHub . В частности, - это FAQ об основных отличиях между экранами и tmux .

576
ответ дан 4 August 2018 в 16:27

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

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

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

Основные функции

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

  • ssh в удаленную машину
  • запустите tmux , введя tmux в оболочку
  • запустите процесс, который вы хотите в запущенном tmux session
  • оставить / отсоединить сеанс tmux , набрав Ctrl + b, а затем d

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

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

tmux может делать гораздо более сложные вещи, чем обрабатывать одно окно в один сеанс. Для получения дополнительной информации смотрите man tmux или страницу tmux GitHub . В частности, - это FAQ об основных отличиях между экранами и tmux .

576
ответ дан 6 August 2018 в 01:07

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

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

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

Основные функции

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

  • ssh в удаленную машину
  • запустите tmux , введя tmux в оболочку
  • запустите процесс, который вы хотите в запущенном tmux session
  • оставить / отсоединить сеанс tmux , набрав Ctrl + b, а затем d

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

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

tmux может делать гораздо более сложные вещи, чем обрабатывать одно окно в один сеанс. Для получения дополнительной информации смотрите man tmux или страницу tmux GitHub . В частности, - это FAQ об основных отличиях между экранами и tmux .

577
ответ дан 7 August 2018 в 18:34

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

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

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

Основные функции

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

  • ssh в удаленную машину
  • запустите tmux , введя tmux в оболочку
  • запустите процесс, который вы хотите в запущенном tmux session
  • оставить / отсоединить сеанс tmux , набрав Ctrl + b, а затем d

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

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

tmux может делать гораздо более сложные вещи, чем обрабатывать одно окно в один сеанс. Для получения дополнительной информации смотрите man tmux или страницу tmux GitHub . В частности, - это FAQ об основных отличиях между экранами и tmux .

579
ответ дан 10 August 2018 в 07:14

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

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

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

Основные функции

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

  • ssh в удаленную машину
  • запустите tmux , введя tmux в оболочку
  • запустите процесс, который вы хотите в запущенном tmux session
  • оставить / отсоединить сеанс tmux , набрав Ctrl + b, а затем d

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

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

tmux может выполнять гораздо более сложные действия, чем обрабатывать одно окно за один сеанс. Для получения дополнительной информации смотрите man tmux или страницу tmux GitHub . В частности, - это часто задаваемые вопросы об основных различиях между экранами и tmux .

582
ответ дан 15 August 2018 в 19:14
  • 1
    @CraigM Используйте экран -x -r [screenname] или screen -rx для краткости, если активен только один сеанс экрана. Это позволяет прикрепить существующий экземпляр экрана. – Lekensteyn 25 November 2012 в 16:31
  • 2
    Этот совет помог мне с той же проблемой, но я думаю, что она включает опечатку. Я уверен, что вам нужно ввести Ctrl-b , а затем d , чтобы оставить / отсоединить сеанс tmux . Конечно, это имеет место для версии tmux на моем Ubuntu 12.04. – cxrodgers 25 December 2012 в 14:31
  • 3
    Я сделал ошибку, следуя приведенным выше инструкциям. Я поделюсь им, если кто-то может попасть в ту же ошибку: я начал использовать tmux в оболочке моего собственного компьютера вместо оболочки удаленного компьютера. Нужно запустить tmux в оболочке удаленного компьютера. – Mert Nuhoglu 22 August 2014 в 19:53
  • 4
    Экран теперь разрабатывается снова: lists.gnu.org/archive/html/screen-devel/2014-04/msg00024.html Не могли бы вы обновить свой ответ? – muru 3 November 2014 в 07:27
  • 5
    Кроме того, запустите tmux detach вместо ввода ctrl-b d – Andrew MacFie 4 November 2015 в 02:51

Вместо:

cmd options;

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

nohup cmd options &

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

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

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

nohup long-running-command &

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

man nohup

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

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

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

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

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

207
ответ дан 25 July 2018 в 18:48
  • 1
    Я бы рекомендовал сделать disown -h – Michele 21 August 2017 в 19:45
  • 2
    интересный экран и tmux не работают для шахтеров, bur nohup работает – Yasin Okumuş 1 November 2017 в 23:04

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

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

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

34
ответ дан 25 July 2018 в 18:48
  • 1
    Встроенные функции всегда являются моим первым выбором :) THX – ken_oy 2 April 2018 в 16:30
  • 2
    Этот ответ должен быть отмечен как правильный. Установка и привыкание экрана для решения этой проблемы преувеличена. – Ulrich-Lorenz Schlüter 5 April 2018 в 14:41
  • 3
    Это очень полезно, если вы уже запустили какую-либо команду и которая работает в течение долгого времени. Завершение и запуск его на сеансе TMUX потребует времени – Deepali Mittal 14 May 2018 в 13:54

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

disown -a
2
ответ дан 25 July 2018 в 18:48

В то время как все говорят использовать 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
ответ дан 25 July 2018 в 18:48
  • 1
    Обычно я называю сеансы экрана с помощью screen -S name, чтобы упростить подключение к правильному позже. – David Oneill 25 November 2012 в 04:37
  • 2
    Если у вас есть еще один запрос, спросите его как новый вопрос – heemayl 30 July 2015 в 05:05
  • 3
    Ссылка не работает – Gab是好人 16 September 2016 в 16:50
  • 4
    Лично я работаю над коробкой без программного обеспечения для управления пакетами. Потратив примерно полчаса на создание зависимостей для TMUX (который у меня лично есть и у меня есть) из источника, стало ясно, что экран стал лучшим и более простым решением для меня. TL; DR: оптимальное решение этой проблемы зависит от варианта использования, машины и того, сколько времени вам нужно настроить. Спасибо за этот ответ :) – Max von Hippel 1 November 2017 в 07:30
  • 5
    Комбинация с screen -S перед отъездом и screen -r при возвращении поразительна! – Meloman 14 March 2018 в 14:03
  • 6
    Спасибо за это. Это решение сработало для меня, пока tmux не сделал (я использую версию bash для Windows, а ssh'ing - в Linux-машину) – Michael Sorensen 13 May 2018 в 22:53

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

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

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

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

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

7
ответ дан 25 July 2018 в 18:48
  • 1
    Этот ответ лучший! Почему все говорят о screen, вопрос был поставлен после входа в систему, как сохранить работу процессов, теперь после входа в систему, но перед их запуском. Отличный ответ Хорхе, ты действительно помог мне! :) – jwbensley 10 August 2012 в 22:13
  • 2
    Просто bg (без %1) достаточно часто, поскольку по умолчанию используется текущее задание – Walter Tross 24 November 2012 в 03:55
  • 3
    Было бы неплохо иметь исчерпывающий ответ: априори (настройка заранее): экран экрана ascii (старый), tmux (neewer); X windows: vnc (старый, по-прежнему поддерживается), xpra (новее), причем xpra является без корневым. Задняя (сохраняющаяся после того, как вы начали): ^ Z, отречься, но я слишком ленив, чтобы ее больше использовать. – Krazy Glew 13 July 2018 в 02:02

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

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

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

71
ответ дан 25 July 2018 в 18:48
  • 1
    Это также мой любимый способ сделать это. Я часто использую disown -a && exit – Stefano Palazzo♦ 21 October 2010 в 22:45
  • 2
    Отлично. Это прекрасная команда и она заслуживает всех! – Greg 29 April 2014 в 15:38
  • 3
    одно слово предостережения, я остановил текущий процесс с помощью Ctrl-Z и не запустил его в фоновом режиме, прежде чем называть disown, и он его убил. – HDave 24 September 2014 в 02:07
  • 4
    Может произойти сбой, если он хочет писать на терминал. Перенаправление вывода запущенного процесса не так просто. Лучше начать его правильно с nohup. – jiggunjer 25 August 2016 в 15:42
  • 5
    Это хороший ответ, потому что он напрямую отвечает на вопрос. Автор вопроса спросил, что делать после , уже выполнив кучу длинных команд. Большинство из этих ответов позволяют вам знать, что делать , прежде чем вы выполните команды. – q0rban 17 August 2017 в 03:24

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

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

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

2
ответ дан 25 July 2018 в 18:48
  • 1
    Не отказываясь от процесса (с чем-то вроде disown или nohup), это обычно не приведет к запуску процесса после окончания сеанса SSH. – Eliah Kagan 13 August 2013 в 05:32
  • 2
    На моем сервере Ubuntu с настройкой по умолчанию он действительно работает! – Mads Skjern 16 March 2015 в 12:53

Существуют две основные программы, которые вы можете использовать для поддержки программ и состояния терминала по нескольким 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
ответ дан 25 July 2018 в 18:48
  • 1
    Я попытался использовать byobu из сеанса, основанного на PuTTY, в своем поле Ubuntu, но я возвращаю строку состояния и прокручиваю на дисплее. Несмотря на то, что он отсоединился правильно, нажав F6, это не было полезным решением в моей настройке. – jfmessier 6 November 2013 в 23:47
  • 2
    @jfmessier Это потому, что PuTTY не принимает ncurses (utf-8 в принципе) хорошо. Можно устранить эту проблему, выполнив этот поток - stackoverflow.com/questions/10731099/… – SiddharthaRT 7 November 2013 в 16:40
  • 3
    Это круто! 1. он дает мне цветное приглашение bash, которое я, похоже, не могу включить с bash в качестве моей оболочки по умолчанию, и 2. Я могу запустить 2 бота одновременно, а все еще имеет другой терминал для работы над ! @SiddharthaRT вы заслуживаете поддержки сэра! – Dev 22 July 2016 в 09:53

Вы должны проверить экран 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
ответ дан 25 July 2018 в 18:48

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

Пример:

/path/to/my/script &

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

7
ответ дан 25 July 2018 в 18:48
  • 1
    Да, я хотел бы знать, как screen / tmux лучше, чем это простое решение. – Mads Skjern 16 March 2015 в 12:51
  • 2
    Да, я тоже вижу это на моем ubuntu, но это не должно быть теоретически. Я не понимаю, почему – Daniel Pinyol 22 April 2016 в 16:08
  • 3
    @MadsSkjern Поскольку вы не можете вводить какие-либо входные данные в скрипт, используя этот метод. – Ken Sharp 11 February 2017 в 02:18
  • 4
    @MadsSkjern причина в том, что если вы запускаете такие процессы с помощью &, если вы выйдете из системы и зашли на свой сеанс SSH, процесс все равно будет запущен , однако вы не сможете увидеть выводит этого процесса (если ваш сценарий эхом отозвался, вы его не увидите, но если он напишет файл, файл будет там) – DarkCygnus 24 August 2017 в 19:20

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

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

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

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

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

16
ответ дан 25 July 2018 в 18:48
  • 1
    byobu использует tmux в эти дни .. – scottl 28 November 2012 в 13:04
  • 2
    «Вы не можете сделать это после того, как процесс начался, вам нужно настроить все, прежде чем запускать многолетнее задание. & quot; - нет, вы можете использовать disown для достижения этого. См. Ответ @ bassgey – Rich 23 May 2013 в 21:11
  • 3
    после борьбы за изучение экрана и tmux .... byobu принес слезы на глаза – HDave 24 September 2014 в 02:06
  • 4
    disown и, если необходимо, просто Ctrl-z, затем bg, чтобы получить его от активного терминала и фона. Тогда disown. – mimoralea 22 November 2017 в 00:49

Вместо:

cmd options;

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

nohup cmd options &

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

tail -f nohup.out
-1
ответ дан 2 August 2018 в 00:57

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

nohup long-running-command &

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

man nohup

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

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

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

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

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

209
ответ дан 2 August 2018 в 00:57
  • 1
    Я бы рекомендовал сделать disown -h – Michele 21 August 2017 в 19:45
  • 2
    интересный экран и tmux не работают для шахтеров, bur nohup работает – Yasin Okumuş 1 November 2017 в 23:04

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

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

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

35
ответ дан 2 August 2018 в 00:57
  • 1
    Встроенные - это всегда мой первый выбор :) THX – ken_oy 2 April 2018 в 16:30
  • 2
    Этот ответ должен быть отмечен как правильный. Установка и привыкание экрана для решения этой проблемы преувеличена. – Ulrich-Lorenz Schlüter 5 April 2018 в 14:41
  • 3
    Это очень полезно, если вы уже запустили какую-либо команду и которая работает в течение долгого времени. Завершение и запуск его на сеансе TMUX потребует времени – Deepali Mittal 14 May 2018 в 13:54

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

disown -a
2
ответ дан 2 August 2018 в 00:57

В то время как все говорят использовать 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 ведет себя по умолчанию? Может быть, некоторые системные администраторы меняют значения по умолчанию на больших оболочках, чтобы процессы своих пользователей перегружали систему?

178
ответ дан 2 August 2018 в 00:57
  • 1
    Обычно я называю сеансы экрана с помощью screen -S name, чтобы упростить подключение к правильному позже. – David Oneill 25 November 2012 в 04:37
  • 2
    Если у вас есть еще один запрос, спросите его как новый вопрос – heemayl 30 July 2015 в 05:05
  • 3
    Ссылка не работает – Gab是好人 16 September 2016 в 16:50
  • 4
    Лично я работаю над коробкой без программного обеспечения для управления пакетами. Потратив примерно полчаса на создание зависимостей для TMUX (который у меня лично есть и у меня есть) из источника, стало ясно, что экран стал лучшим и более простым решением для меня. TL; DR: оптимальное решение этой проблемы зависит от варианта использования, машины и того, сколько времени вам нужно настроить. Спасибо за этот ответ :) – Max von Hippel 1 November 2017 в 07:30
  • 5
    Комбинация с screen -S перед отъездом и screen -r при возвращении поразительна! – Meloman 14 March 2018 в 14:03
  • 6
    Спасибо за это. Это решение сработало для меня, пока tmux не сделал (я использую версию bash для Windows, а ssh'ing - в Linux-машину) – Michael Sorensen 13 May 2018 в 22:53

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

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

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

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

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

7
ответ дан 2 August 2018 в 00:57
  • 1
    Этот ответ лучший! Почему все говорят о screen, вопрос был поставлен после входа в систему, как сохранить работу процессов, теперь после входа в систему, но перед их запуском. Отличный ответ Хорхе, ты действительно помог мне! :) – jwbensley 10 August 2012 в 22:13
  • 2
    Просто bg (без %1) достаточно часто, поскольку по умолчанию используется текущее задание – Walter Tross 24 November 2012 в 03:55
  • 3
    Было бы неплохо иметь исчерпывающий ответ: априори (настройка заранее): экран экрана ascii (старый), tmux (neewer); X windows: vnc (старый, по-прежнему поддерживается), xpra (новее), причем xpra является без корневым. Задняя (сохраняющаяся после того, как вы начали): ^ Z, отречься, но я слишком ленив, чтобы ее больше использовать. – Krazy Glew 13 July 2018 в 02:02

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

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

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

72
ответ дан 2 August 2018 в 00:57
  • 1
    Это также мой любимый способ сделать это. Я часто использую disown -a && exit – Stefano Palazzo♦ 21 October 2010 в 22:45
  • 2
    Отлично. Это прекрасная команда и она заслуживает всех! – Greg 29 April 2014 в 15:38
  • 3
    одно слово предостережения, я остановил текущий процесс с помощью Ctrl-Z и не запустил его в фоновом режиме, прежде чем называть disown, и он его убил. – HDave 24 September 2014 в 02:07
  • 4
    Может произойти сбой, если он хочет писать на терминал. Перенаправление вывода запущенного процесса не так просто. Лучше начать его правильно с nohup. – jiggunjer 25 August 2016 в 15:42
  • 5
    Это хороший ответ, потому что он напрямую отвечает на вопрос. Автор вопроса спросил, что делать после , уже выполнив кучу длинных команд. Большинство из этих ответов позволяют вам знать, что делать , прежде чем вы выполните команды. – q0rban 17 August 2017 в 03:24

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

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

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

2
ответ дан 2 August 2018 в 00:57
  • 1
    Не отказываясь от процесса (с чем-то вроде disown или nohup), это обычно не приведет к запуску процесса после окончания сеанса SSH. – Eliah Kagan 13 August 2013 в 05:32
  • 2
    На моем сервере Ubuntu с настройкой по умолчанию он действительно работает! – Mads Skjern 16 March 2015 в 12:53

Существуют две основные программы, которые вы можете использовать для поддержки программ и состояния терминала по нескольким 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
ответ дан 2 August 2018 в 00:57
  • 1
    Я попытался использовать byobu из сеанса, основанного на PuTTY, в своем поле Ubuntu, но я возвращаю строку состояния и прокручиваю на дисплее. Несмотря на то, что он отсоединился правильно, нажав F6, это не было полезным решением в моей настройке. – jfmessier 6 November 2013 в 23:47
  • 2
    @jfmessier Это потому, что PuTTY не принимает ncurses (utf-8 в принципе) хорошо. Можно устранить эту проблему, выполнив этот поток - stackoverflow.com/questions/10731099/… – SiddharthaRT 7 November 2013 в 16:40
  • 3
    Это круто! 1. он дает мне цветное приглашение bash, которое я, похоже, не могу включить с bash в качестве моей оболочки по умолчанию, и 2. Я могу запустить 2 бота одновременно, а все еще имеет другой терминал для работы над ! @SiddharthaRT вы заслуживаете поддержки сэра! – Dev 22 July 2016 в 09:53

Вы должны проверить экран 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
ответ дан 2 August 2018 в 00:57

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

Пример:

/path/to/my/script &

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

7
ответ дан 2 August 2018 в 00:57
  • 1
    Да, я хотел бы знать, как screen / tmux лучше, чем это простое решение. – Mads Skjern 16 March 2015 в 12:51
  • 2
    Да, я тоже вижу это на моем ubuntu, но это не должно быть теоретически. Я не понимаю, почему – Daniel Pinyol 22 April 2016 в 16:08
  • 3
    @MadsSkjern Поскольку вы не можете вводить какие-либо входные данные в скрипт, используя этот метод. – Ken Sharp 11 February 2017 в 02:18
  • 4
    @MadsSkjern причина в том, что если вы запускаете такие процессы с помощью &, если вы выйдете из системы и зашли на свой сеанс SSH, процесс все равно будет запущен , однако вы не сможете увидеть выводит этого процесса (если ваш сценарий эхом отозвался, вы его не увидите, но если он напишет файл, файл будет там) – DarkCygnus 24 August 2017 в 19:20

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

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