Вы должны искать современные альтернативы, как tmux.
tmuxпревосходит по screenмногим причинам, вот лишь несколько примеров:
Окна могут быть перемещены между сеансами и даже связаны с несколькими сеансами
Окна можно разбить по горизонтали и вертикали на панели
Поддержка цветных терминалов UTF-8 и 256
Сеансы можно контролировать из оболочки без необходимости входа в сеанс
Основная функциональность
Для того, чтобы получить ту же функциональность , как описано в ответ рекомендации screen, вы должны сделать следующее:
SSH в удаленной машине
начать tmuxс ввода tmuxв оболочку
запустить процесс, который вы хотите внутри запущенного tmuxсеанса
выйти / отменить tmuxсеанс, набрав Ctrl+, bа затемd
Теперь вы можете безопасно выйти из системы с удаленного компьютера, ваш процесс продолжит работать внутри tmux. Когда вы вернетесь снова и захотите проверить состояние вашего процесса, вы можете использовать его tmux attachдля присоединения к вашему tmuxсеансу.
Если вы хотите, чтобы несколько сеансов выполнялись параллельно, вам следует называть каждый сеанс с помощью Ctrl+ bи $. Вы можете получить список текущих запущенных сеансов, используя tmux list-sessions, теперь присоедините к запущенному сеансу с помощью команды tmux attach-session -t 0.
tmuxможет делать гораздо более сложные вещи, чем обрабатывать одно окно за один сеанс. Для получения дополнительной информации посмотрите в man tmuxили на GitHub странице tmux . В частности, вот часто задаваемые вопросы об основных различиях между screenи tmux.
@CraigM Используйте screen -x -r [screenname]или screen -rxдля краткости, если у вас активен только один сеанс экрана. Это позволяет вам прикрепить существующий экземпляр экрана.
Лекенштейн
5
Этот совет помог мне с той же проблемой, но я думаю, что он включает опечатку. Я вполне уверен, что вам нужно набрать, Ctrl-bа затем d, чтобы выйти / отключить tmuxсеанс. Конечно, это относится к версии tmuxна моем Ubuntu 12.04.
cxrodgers
17
Я сделал ошибку, следуя приведенным выше инструкциям. Я поделюсь этим, если кто-то может упасть в ту же ошибку: я запустил tmux в оболочке моего собственного компьютера вместо оболочки удаленного компьютера. Нужно запустить tmux в оболочке удаленного компьютера.
В качестве альтернативы, запустите tmux detachвместо того, чтобы печататьctrl-b d
Андрей
306
Опция 1: nohup
Лучший способ часто самый простой.
nohup long-running-command &
Это было сделано специально для этого, он даже регистрирует стандартный вывод nohup.log.
man nohup
Вариант 2: bg
Если вы хотите «справиться» с некоторыми уже запущенными задачами, то лучше всего Ctrl+ Zзатем запустить
bg
перевести вашу последнюю приостановленную задачу в фоновый режим, чтобы она продолжала выполняться.
Затем быстрое disownдолжно держать процесс запущенным после выхода из системы.
screenи другие могут сделать это, но это не то, для чего они. Я рекомендую nohupдля задач, которые вы знаете, что вы собираетесь оставить позади, и bgдля задач, которые вы уже выполняете и не хотите перезапускать.
Имейте в виду, что оба bash специфичны. Если вы не используете bash, то команды могут отличаться.
bg+ disownне работает для меня. У меня был запущен скрипт развертывания, я забыл запустить его внутри tmux, и мне нужно было рано уйти на встречу. Скрипт непрерывно выводит прогресс в оболочку. ctrl+zостановил процесс, вернув меня в bash. bgвозобновил процесс, но он также возобновил вывод статуса в bash, делая невозможным просмотр того, что я печатал. Тем не менее, disownкоманда выдала «disown: current: no
not
это не сработало для меня julia myFile.jlпо любой причине. Tmux делает и отлично.
kilgoretrout
Это сработало для меня, большое спасибо
Чад
207
Вы можете сделать это с помощью screen.
Напечатайте, man screenчтобы узнать больше или прочитайте эту страницу руководства экрана .
Простой сценарий:
SSH в ваш удаленный ящик. Тип screenЗатем запустите нужный процесс.
Нажмите Ctrl- Aтогда Ctrl- D. Это «отсоединит» ваш сеанс экрана, но оставит ваши процессы запущенными. Теперь вы можете выйти из удаленного окна.
Если вы хотите вернуться позже, войдите в систему еще раз и наберите « screen -rЭто» возобновит сеанс экрана, и вы сможете увидеть результаты вашего процесса.
Обычно я называю свои сеансы экрана, screen -S nameчтобы потом было проще подключиться к нужному.
Дэвид Онеилл
Ссылка не работает
Габ 是 好人
1
Лично я работаю над коробкой без какой-либо программы контроля пакетов. Потратив примерно полчаса на создание зависимостей для TMUX (с которыми у меня лично есть опыт работы с ним и которые мне нравятся) из источника, стало ясно, что экран для меня - лучшее и более простое решение. TL; DR: оптимальное решение этой проблемы зависит от варианта использования, машины и того, сколько времени вам потребуется на настройку. Спасибо за этот ответ :)
Макс фон Хиппель
Сочетание с screen -Sперед отъездом и screen -rпри возвращении удивительно!
Меломан
Спасибо за это. Это решение работало для меня, а tmux - нет (я использую версию bash для Windows, когда ssh'ing в Linux-машину)
Майкл Соренсен,
83
Screen и nohup - лучший способ, но если вам нужно отсоединить процесс, уже запущенный без screen или nohup, вы можете запустить команду disown.
disown [-ar] [-h] [jobspec… |pid… ]
Без параметров удалите каждую спецификацию заданий из таблицы активных заданий. Если -hуказан этот параметр, задание не удаляется из таблицы, а помечается так, что SIGHUP не отправляется заданию, если оболочка получает SIGHUP. Если задание отсутствует, и -aни -rопция, ни опция не указаны, используется текущее задание. Если спецификация-a заданий не указана, опция означает удалить или отметить все задания; -rвариант без jobspec аргумента ограничивает операцию выполнения заданий.
С помощью disown вы можете закрыть терминал и запустить процесс на компьютере.
Это также мой любимый способ сделать это. Я часто используюdisown -a && exit
Стефано Палаццо
1
Отлично. Это прекрасная команда и заслуживает всех голосов!
Грег
8
Одним словом предостережения, я остановил запущенный процесс с помощью Ctrl-Z и не запустил его в фоновом режиме перед вызовом, disownи это убило его.
HDave
3
Может произойти сбой, если он хочет написать в терминал. Перенаправление вывода запущенного процесса не так просто. Лучше начать все правильно с nohup.
jiggunjer
2
Это хороший ответ, потому что он прямо отвечает на вопрос. Автор вопроса спросил, что делать после того, как он уже выполнил кучу длительных команд. Большинство из этих ответов позволяют вам знать, что делать, прежде чем выполнять команды.
q0rban
53
Я застрял в большом mv, поэтому я не мог остановить процесс, экран настройки и затем запустить его снова. Мне удалось выйти из сеанса ssh с запущенным процессом, выполнив следующие действия:
SSH [сервер]
команда
Ctrl+Z
Б.Г.
disown [необязательный pid процесса, по умолчанию последний)
Выход
Шаг 3 приостанавливает текущий процесс (например, моя команда 'mv').
Шаг 4 переводит приостановленный процесс в фоновый режим и возобновляет его.
Шаг 5 позволяет вам отказаться от процесса. ** Чтобы получить список рабочих мест, просто введите jobsранее.
** Относительно отказа (из руководства по bash):
disown [-ar] [-h] [jobspec ... | pid ... ]
Without options, remove each jobspec from the table of active
jobs. If jobspec is not present, and neither the -a nor the -r
option is supplied, the current job is used. If the -h option
is given, each jobspec is not removed from the table, but is
marked so that SIGHUP is not sent to the job if the shell
receives a SIGHUP. If no jobspec is supplied, the -a option
means to remove or mark all jobs; the -r option without a job‐
spec argument restricts operation to running jobs. The return
value is 0 unless a jobspec does not specify a valid job.
Этот ответ должен быть помечен как правильный. Для установки и привыкания экрана для решения этой проблемы преувеличено.
Ульрих-Лоренц Шлютер
Это очень полезно, когда вы уже запустили какую-либо команду и которая выполняется долго. Завершение и запуск его в сеансе TMUX займет время
Дипали Миттал
1
@ Том-Броссман: Пожалуйста, следите за ненужными правками, как этот ! Если вызывается без указания задания, disownвстроенная команда действует для самого последнего фонового задания.
Дэвид Фёрстер
22
Есть две основные программы, которые вы можете использовать для поддержки программ и состояния терминала через несколько соединений SSH. Это screen (действующий, но, к сожалению, не поддерживаемый. Видимо , сейчас активно развивается ) и tmux (более новый, активно поддерживаемый). Byobu - это интерфейс, который может работать поверх этих систем и предоставлять дополнительную информацию о состоянии Ubuntu. В новых установках он будет использовать tmux в качестве бэкэнда, если у вас более старая установка byobu и существующий конфиг, он будет поддерживать предыдущий бэкэнд, будь то screen или tmux.
бёбу
Byobu можно установить на компьютер, выполнив это на компьютере с Debian:
sudo aptitude install byobu
Используя yum, вы делаете
su -c 'yum install byobu'
Также возможно установить byobu на другие дистрибутивы.
Используя byobu
Вы можете запустить byobu, запустив byobuна хост-машине после подключения с помощью ssh. Это даст вам оболочку, которая выглядит следующим образом:
Вы также можете использовать Byobu Terminal на машине с Ubuntu с опцией -X и легко получить идеально работающую byobu.
Использование:
Начните byobu, набрав byobu.
Вы можете нажать F2, чтобы создать новое окно в текущем сеансе, F3-F4, чтобы переключаться между различными окнами.
Самое приятное в byobu - вам не нужно фактически убивать процессы, запущенные в терминале, чтобы покинуть терминал. Вы можете просто отправить screen / tmux (скелет byobu) на задний план и продолжить в следующий раз:
Чтобы покинуть бёбу и держать его работающим (отсоединить), нажмите F6.
В следующий раз, когда вы приедете, просто сделайте, byobuи вы должны вернуться туда, где вы были.
Вы также можете создавать различные сеансы byobu byobu -S session1и так далее. И вы можете подключиться к любому из них, когда вы вернетесь.
Вы можете сделать гораздо больше, используя Byobu. Используй это! Некоторые окончательные руководства здесь или здесь .
Я попытался использовать byobu из сеанса на основе PuTTY в своем Ubuntu-окне, но строка состояния повторяется и прокручивается на дисплее. Хотя он отсоединялся должным образом при нажатии клавиши F6, это не было полезным решением в моей настройке.
jfmessier
1
@jfmessier Это потому, что PuTTY не очень хорошо берет ncurses (utf-8). Эту проблему можно устранить, следуя этой теме - stackoverflow.com/questions/10731099/…
SiddharthaRT
Это круто! 1. он дает мне цветное приглашение bash, которое я не могу включить с помощью bash в качестве оболочки по умолчанию и 2. я могу запустить 2 бота одновременно, и у меня все еще есть другой терминал для работы! @SiddharthaRT Вы заслуживаете возражения, сэр!
Дев
18
Вы не можете сделать это после запуска процесса, вам нужно настроить все, прежде чем запускать долго выполняемое задание.
Вы можете использовать nohup, но современная мудрость предполагает, что вы используете экран или byobu в качестве логина, чтобы вы могли отсоединиться и оставить все как есть.
Преимущество Screen заключается в том, что вы можете отсоединиться от одного компьютера и снова подключить его к другому, что удобно, если вы хотите проверить длительно работающие процессы, работающие после конца рабочего дня.
Byobu помещает простой интерфейс в верхнюю часть экрана с меню и т. д. Это также текущая реализация экрана в более новой версии Ubuntu. F2 для запуска новой клеммы F3 / F4 для переключения вперед и назад и F6 для отключения. Введите exit, чтобы окончательно завершить терминалы.
«Вы не можете сделать это после запуска процесса, вам нужно настроить все, прежде чем запускать долго выполняемое задание». - нет, вы можете использовать disownдля этого. Смотрите ответ @ bassgey
Rich
1
после того, как изо всех сил пытался изучить экран и tmux .... byobu вызвал слезы на моих глазах
HDave
disownа при необходимости просто Ctrl-z, bgчтобы получить его из активного терминала и в фоновом режиме. Тогда disown.
Mimoralea
8
Эй, пока я согласился, что экран - самый эффективный вариант. Вы можете использовать vncserver, а затем запустить процесс на нем.
Кроме того, если ваш единственный интерес заключается в том, чтобы запустить процесс и не нужно возвращать его к себе, и, что крайне важно, вы не знали, что вам нужно будет закрыть сеанс, и у вас уже запущен процесс, вам не повезет, если Вы использовали Bash в качестве оболочки
Сначала вам нужно отправить процесс в фоновый режим, набрав Ctrl + Z, а затем bg% 1 (число зависит от номера задания, обычно это 1, но вы можете легко получить список, используя команду jobs)
Наконец, вызовите команду disown (с последующим идентификатором jobid ... как с командой bg)
Это удалит отношения родитель-потомок между вашей оболочкой и процессом в фоновом режиме, предотвращая его отмирание при завершении работы оболочки.
Этот ответ самый лучший! Почему все говорят о том screen, что после входа в систему был задан вопрос, как сохранить процессы запущенными, теперь после входа в систему, но до их запуска. Отличный ответ Хорхе, вы действительно помогли мне! :)
jwbensley
1
Просто bg(без %1) достаточно часто, так как по умолчанию текущая работа
Уолтер Тросс
Было бы неплохо получить исчерпывающий ответ: A priori (настройка заранее): экран терминала ascii (старый), tmux (новый); X windows: vnc (старый, все еще поддерживается), xpra (более новый), с xpra, не имеющим прав root. Апостериорный (настойчиво после того, как вы начали): ^ Z, отрекайтесь, ... Но я слишком ленив, чтобы конкретизировать это больше, чем это.
Крейзи Глеу
8
Для одного сценария оболочки, который я выполняю в течение длительного периода времени, я войду в систему и запусту процесс в фоновом режиме, используя '&'.
Пример:
/path/to/my/script &
Я вышел из системы и отключил сеанс SSH. Когда я регистрируюсь через некоторое время, сценарий все еще выполняется, что подтверждается непрерывным сбором данных из сценария.
Да, я хотел бы знать, насколько screen / tmux лучше этого простого решения.
Мадс Скьерн
Да, я могу видеть это и на моей Ubuntu, но это не должно происходить в теории. Я не понимаю, почему
Даниэль Пиньоль
1
@MadsSkjern Потому что вы не можете вводить какие-либо входные данные в сценарий, используя этот метод.
Кен Шарп
1
@MadsSkjern, причина в том, что если вы запустите такие процессы с помощью, &если вы выйдете из системы и войдете в сеанс SSH, процесс все равно будет работать, однако вы не сможете увидеть выходные данные этого процесса (если ваш сценарий повторяет что-то, что вы не увидит, но если он напишет файл, файл будет там)
DarkCygnus
4
Вы должны проверить GNU Screen и посмотреть, поможет ли он вам. В зависимости от того, как вам нужно, чтобы ваше приложение работало в реальном времени, оно может вызвать больше проблем, чем решает, но, по крайней мере, позволит вам возобновить сеанс, как будто вы его никогда не покидали.
Как пользоваться :
Используйте команду screenдля первого запуска, пролистайте вводные сообщения, вам должен быть вручен терминал.
Ca Cc открывает еще один терминал
Ca Ck убивает терминал
Вы можете использовать Ca C-Space и Ca C-Backspace для переключения между терминалами
Ca Ca удобен, если вы используете в основном только два терминала
Ca Cd отключает текущий сеанс экрана и выходит из экранов. Затем вы можете использовать, screen -rчтобы возобновить этот сеанс. Вы можете иметь несколько отдельных сеансов экрана одновременно, в этом случае вам будет показан список доступных сеансов.
Есть много других опций, например, разделенные экраны, а также все ярлыки полностью настраиваемые.
Хотя все говорят, что нужно использовать disown(единственный вариант, который у вас есть после того, как вы уже запустили процесс), nohupили даже запустить команду screen, что полезно, если вы хотите увидеть весь вывод команды ... Я фанат screenЯ до сих пор пробовал самые последние распространенные дистрибутивы Linux, и просто перевод задания в фоновый режим и выход из него не приводят к смерти всех запущенных процессов. Там должно быть глобальное урегулирование или что-то. Я пытаюсь сделать это на некоторых довольно старых системах (slackware 12), и мой тестовый скрипт продолжает работать, пока я не убью его вручную:
Хотя я согласен, что screenэто будет лучший способ выполнить это, даже если мой сценарий будет записывать в файлы журналов или что- то в этом роде ... Мне никогда не приходилось использовать, disown -a или nohupесли это не было полной паранойей. Может быть, кто-то может пролить свет на поведение bash по умолчанию? Может быть, некоторые системные администраторы изменяют настройки по умолчанию для больших оболочек, чтобы процессы своих пользователей не перегружали систему?
Если у вас есть еще вопросы, пожалуйста, задайте их как новый вопрос
Heemayl
0
К сожалению, завершенный сеанс SSH может привести к удалению tmux или экрана. Это потому, systemdчто прекратит любые дочерние процессы при выходе из сеанса.
Вы можете изменить эту настройку в вашем logind.conf( /etc/systemd/logind.conf):
Ответы:
Вы должны искать современные альтернативы, как
tmux
.tmux
превосходит поscreen
многим причинам, вот лишь несколько примеров:Основная функциональность
Для того, чтобы получить ту же функциональность , как описано в ответ рекомендации
screen
, вы должны сделать следующее:tmux
с вводаtmux
в оболочкуtmux
сеансаtmux
сеанс, набрав Ctrl+, bа затемdТеперь вы можете безопасно выйти из системы с удаленного компьютера, ваш процесс продолжит работать внутри
tmux
. Когда вы вернетесь снова и захотите проверить состояние вашего процесса, вы можете использовать егоtmux attach
для присоединения к вашемуtmux
сеансу.Если вы хотите, чтобы несколько сеансов выполнялись параллельно, вам следует называть каждый сеанс с помощью Ctrl+ bи
$
. Вы можете получить список текущих запущенных сеансов, используяtmux list-sessions
, теперь присоедините к запущенному сеансу с помощью командыtmux attach-session -t 0
.tmux
может делать гораздо более сложные вещи, чем обрабатывать одно окно за один сеанс. Для получения дополнительной информации посмотрите вman tmux
или на GitHub странице tmux . В частности, вот часто задаваемые вопросы об основных различиях междуscreen
иtmux
.источник
screen -x -r [screenname]
илиscreen -rx
для краткости, если у вас активен только один сеанс экрана. Это позволяет вам прикрепить существующий экземпляр экрана.Ctrl-b
а затемd
, чтобы выйти / отключитьtmux
сеанс. Конечно, это относится к версииtmux
на моем Ubuntu 12.04.tmux detach
вместо того, чтобы печататьctrl-b d
Опция 1:
nohup
Лучший способ часто самый простой.
Это было сделано специально для этого, он даже регистрирует стандартный вывод
nohup.log
.Вариант 2:
bg
Если вы хотите «справиться» с некоторыми уже запущенными задачами, то лучше всего Ctrl+ Zзатем запустить
перевести вашу последнюю приостановленную задачу в фоновый режим, чтобы она продолжала выполняться.
Затем быстрое
disown
должно держать процесс запущенным после выхода из системы.screen
и другие могут сделать это, но это не то, для чего они. Я рекомендуюnohup
для задач, которые вы знаете, что вы собираетесь оставить позади, иbg
для задач, которые вы уже выполняете и не хотите перезапускать.Имейте в виду, что оба bash специфичны. Если вы не используете bash, то команды могут отличаться.
источник
disown -h
bg
+disown
не работает для меня. У меня был запущен скрипт развертывания, я забыл запустить его внутри tmux, и мне нужно было рано уйти на встречу. Скрипт непрерывно выводит прогресс в оболочку.ctrl+z
остановил процесс, вернув меня в bash.bg
возобновил процесс, но он также возобновил вывод статуса в bash, делая невозможным просмотр того, что я печатал. Тем не менее,disown
команда выдала «disown: current: nojulia myFile.jl
по любой причине. Tmux делает и отлично.Вы можете сделать это с помощью
screen
.Напечатайте,
man screen
чтобы узнать больше или прочитайте эту страницу руководства экрана .Простой сценарий:
SSH в ваш удаленный ящик. Тип
screen
Затем запустите нужный процесс.Нажмите Ctrl- Aтогда Ctrl- D. Это «отсоединит» ваш сеанс экрана, но оставит ваши процессы запущенными. Теперь вы можете выйти из удаленного окна.
Если вы хотите вернуться позже, войдите в систему еще раз и наберите «
screen -r
Это» возобновит сеанс экрана, и вы сможете увидеть результаты вашего процесса.источник
screen -S name
чтобы потом было проще подключиться к нужному.screen -S
перед отъездом иscreen -r
при возвращении удивительно!Screen и nohup - лучший способ, но если вам нужно отсоединить процесс, уже запущенный без screen или nohup, вы можете запустить команду disown.
С помощью disown вы можете закрыть терминал и запустить процесс на компьютере.
источник
disown -a && exit
disown
и это убило его.Я застрял в большом mv, поэтому я не мог остановить процесс, экран настройки и затем запустить его снова. Мне удалось выйти из сеанса ssh с запущенным процессом, выполнив следующие действия:
Шаг 3 приостанавливает текущий процесс (например, моя команда 'mv').
Шаг 4 переводит приостановленный процесс в фоновый режим и возобновляет его.
Шаг 5 позволяет вам отказаться от процесса. ** Чтобы получить список рабочих мест, просто введите
jobs
ранее.** Относительно отказа (из руководства по bash):
источник
disown
встроенная команда действует для самого последнего фонового задания.Есть две основные программы, которые вы можете использовать для поддержки программ и состояния терминала через несколько соединений SSH. Это screen (действующий, но, к сожалению, не поддерживаемый. Видимо , сейчас активно развивается ) и tmux (более новый, активно поддерживаемый). Byobu - это интерфейс, который может работать поверх этих систем и предоставлять дополнительную информацию о состоянии Ubuntu. В новых установках он будет использовать tmux в качестве бэкэнда, если у вас более старая установка byobu и существующий конфиг, он будет поддерживать предыдущий бэкэнд, будь то screen или tmux.
бёбу
Byobu можно установить на компьютер, выполнив это на компьютере с Debian:
Используя yum, вы делаете
Также возможно установить byobu на другие дистрибутивы.
Используя byobu
Вы можете запустить byobu, запустив
byobu
на хост-машине после подключения с помощью ssh. Это даст вам оболочку, которая выглядит следующим образом:Вы также можете использовать Byobu Terminal на машине с Ubuntu с опцией -X и легко получить идеально работающую byobu.
Использование:
Начните byobu, набрав
byobu
.Вы можете нажать F2, чтобы создать новое окно в текущем сеансе, F3-F4, чтобы переключаться между различными окнами.
Самое приятное в byobu - вам не нужно фактически убивать процессы, запущенные в терминале, чтобы покинуть терминал. Вы можете просто отправить screen / tmux (скелет byobu) на задний план и продолжить в следующий раз:
В следующий раз, когда вы приедете, просто сделайте,
byobu
и вы должны вернуться туда, где вы были.Вы также можете создавать различные сеансы byobu
byobu -S session1
и так далее. И вы можете подключиться к любому из них, когда вы вернетесь.Вы можете сделать гораздо больше, используя Byobu. Используй это! Некоторые окончательные руководства здесь или здесь .
источник
Вы не можете сделать это после запуска процесса, вам нужно настроить все, прежде чем запускать долго выполняемое задание.
Вы можете использовать nohup, но современная мудрость предполагает, что вы используете экран или byobu в качестве логина, чтобы вы могли отсоединиться и оставить все как есть.
Преимущество Screen заключается в том, что вы можете отсоединиться от одного компьютера и снова подключить его к другому, что удобно, если вы хотите проверить длительно работающие процессы, работающие после конца рабочего дня.
Существует разумное руководство по началу работы здесь.
Byobu помещает простой интерфейс в верхнюю часть экрана с меню и т. д. Это также текущая реализация экрана в более новой версии Ubuntu. F2 для запуска новой клеммы F3 / F4 для переключения вперед и назад и F6 для отключения. Введите exit, чтобы окончательно завершить терминалы.
источник
disown
для этого. Смотрите ответ @ bassgeydisown
а при необходимости простоCtrl-z
,bg
чтобы получить его из активного терминала и в фоновом режиме. Тогдаdisown
.Эй, пока я согласился, что экран - самый эффективный вариант. Вы можете использовать vncserver, а затем запустить процесс на нем.
Кроме того, если ваш единственный интерес заключается в том, чтобы запустить процесс и не нужно возвращать его к себе, и, что крайне важно, вы не знали, что вам нужно будет закрыть сеанс, и у вас уже запущен процесс, вам не повезет, если Вы использовали Bash в качестве оболочки
Сначала вам нужно отправить процесс в фоновый режим, набрав Ctrl + Z, а затем bg% 1 (число зависит от номера задания, обычно это 1, но вы можете легко получить список, используя команду jobs)
Наконец, вызовите команду disown (с последующим идентификатором jobid ... как с командой bg)
Это удалит отношения родитель-потомок между вашей оболочкой и процессом в фоновом режиме, предотвращая его отмирание при завершении работы оболочки.
источник
screen
, что после входа в систему был задан вопрос, как сохранить процессы запущенными, теперь после входа в систему, но до их запуска. Отличный ответ Хорхе, вы действительно помогли мне! :)bg
(без%1
) достаточно часто, так как по умолчанию текущая работаДля одного сценария оболочки, который я выполняю в течение длительного периода времени, я войду в систему и запусту процесс в фоновом режиме, используя '&'.
Пример:
Я вышел из системы и отключил сеанс SSH. Когда я регистрируюсь через некоторое время, сценарий все еще выполняется, что подтверждается непрерывным сбором данных из сценария.
источник
&
если вы выйдете из системы и войдете в сеанс SSH, процесс все равно будет работать, однако вы не сможете увидеть выходные данные этого процесса (если ваш сценарий повторяет что-то, что вы не увидит, но если он напишет файл, файл будет там)Вы должны проверить GNU Screen и посмотреть, поможет ли он вам. В зависимости от того, как вам нужно, чтобы ваше приложение работало в реальном времени, оно может вызвать больше проблем, чем решает, но, по крайней мере, позволит вам возобновить сеанс, как будто вы его никогда не покидали.
Как пользоваться :
screen
для первого запуска, пролистайте вводные сообщения, вам должен быть вручен терминал.screen -r
чтобы возобновить этот сеанс. Вы можете иметь несколько отдельных сеансов экрана одновременно, в этом случае вам будет показан список доступных сеансов.Есть много других опций, например, разделенные экраны, а также все ярлыки полностью настраиваемые.
источник
Самый простой ответ ...
Ctrl + Z приостановит запущенную программу
«BG» будет запускать его в фоновом режиме
источник
disown
илиnohup
) это обычно не будет запускать процесс после окончания сеанса SSH.Самый простой способ - запустить команду в фоновом режиме
&
. Тогда просто напишите:источник
Хотя все говорят, что нужно использовать
disown
(единственный вариант, который у вас есть после того, как вы уже запустили процесс),nohup
или даже запустить командуscreen
, что полезно, если вы хотите увидеть весь вывод команды ... Я фанатscreen
Я до сих пор пробовал самые последние распространенные дистрибутивы Linux, и просто перевод задания в фоновый режим и выход из него не приводят к смерти всех запущенных процессов. Там должно быть глобальное урегулирование или что-то. Я пытаюсь сделать это на некоторых довольно старых системах (slackware 12), и мой тестовый скрипт продолжает работать, пока я не убью его вручную:Хотя я согласен, что
screen
это будет лучший способ выполнить это, даже если мой сценарий будет записывать в файлы журналов или что- то в этом роде ... Мне никогда не приходилось использовать,disown -a
илиnohup
если это не было полной паранойей. Может быть, кто-то может пролить свет на поведение bash по умолчанию? Может быть, некоторые системные администраторы изменяют настройки по умолчанию для больших оболочек, чтобы процессы своих пользователей не перегружали систему?источник
К сожалению, завершенный сеанс SSH может привести к удалению tmux или экрана. Это потому,
systemd
что прекратит любые дочерние процессы при выходе из сеанса.Вы можете изменить эту настройку в вашем
logind.conf
(/etc/systemd/logind.conf
):Спасибо за ответ в https://unix.stackexchange.com/questions/490267 .
источник
Вместо :
Добавить до
nohup
:Затем вы сможете увидеть стандартный вывод консоли:
источник