Как сохранить процессы запущенными после завершения сеанса SSH?

Вы упоминаете, что вам неудобно компилировать и устанавливать драйвер, но, к сожалению, вы не можете сделать это без этого. К счастью, из-за боли, которую я пережил лично, я сделал это как можно проще для вас. Я исправил проблемы компиляции 13.04 с драйвером RTL8188CE и поместил подробные инструкции для установки на моем Git Hub .

Эта версия исправляет ошибку компиляции, а также фиксирует жестко закодированное значение мощности передачи, которое было установлено на 22 дБм.

Сначала установите Git и соберите зависимости:

sudo apt-get install git
apt-get install gcc build-essential linux-headers-generic linux-headers-`uname -r`

Затем клонируйте репо. Мне нравится делать каталог в моей домашней папке и помещать его туда:

cd ~
mkdir gitclone && cd gitclone
git clone https://github.com/FreedomBen/rtl8188ce-linux-driver/blob/master/README.md
cd rtl8188ce-linux-driver

Затем следуйте инструкциям в README.md

РЕДАКТИРОВАТЬ: 22-Jan-2015

[1113 ] Теперь стало еще проще. Установите git:

sudo apt-get install git

и выполните эту команду

git clone https://github.com/FreedomBen/rtl8188ce-linux-driver.git && cd rtl8188ce-linux-driver && ./install.sh`

593
задан 26.10.2019, 21:07

13 ответов

Вместо:

cmd options; 

Добавьте до nohup:

nohup cmd options & 

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

tail -f nohup.out
0
ответ дан 26.10.2019, 21:08

Хотя все говорят, что нужно использовать 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
ответ дан 26.10.2019, 21:08

Простейший ответ ...

Ctrl + Z приостановит запущенную программу

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

0
ответ дан 26.10.2019, 21:09
  • 1
    Без отказа от процесса (с чем-то вроде disown или nohup) это обычно не будет поддерживать процесс после завершения сеанса SSH. – Mike 26.10.2019, 21:09
  • 2
    На моем сервере Ubuntu с настройками по умолчанию он действительно продолжает работать! – enoted 26.10.2019, 21:10

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

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

  • Используйте команду screen для первого запуска, пролистайте вводные сообщения, вам нужно будет передать терминал.
  • Ca Cc открывает другой терминал
  • Ca Ck убивает терминал
  • Вы можете использовать Ca C-Space и Ca C-Backspace для циклического перемещения по терминалам
  • Ca Ca is удобно, если вы в основном используете только два терминала
  • Ca Cd отключает текущий сеанс экрана и выходит из экранов. Затем вы можете использовать screen -r для возобновления этого сеанса. Вы можете иметь несколько отдельных сеансов экрана одновременно, в этом случае вам будет показан список доступных сеансов.

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

0
ответ дан 26.10.2019, 21:09

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

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

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

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

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

0
ответ дан 26.10.2019, 21:10
  • 1
    Просто bg (без %1) достаточно часто, так как по умолчанию текущая работа – boomba 26.10.2019, 21:10
  • 2
    Было бы неплохо получить исчерпывающий ответ: A priori (настройка заранее): экран терминала ascii (старый), tmux (новый); X windows: vnc (старый, все еще поддерживается), xpra (более новый), с xpra, не имеющим прав root. Апостериорный (настойчиво после того, как вы начали): ^ Z, отрекайтесь, ... Но я слишком ленив, чтобы конкретизировать это больше, чем это. – SuperBiasedMan 26.10.2019, 21:11
  • 3
    Этот ответ самый лучший! Почему все говорят о screen, вопрос был задан после входа в систему, как сохранить процессы запущенными, теперь после входа в систему, но до их запуска. Отличный ответ Хорхе, вы действительно помогли мне! :) – Tuukka Mustonen 26.10.2019, 21:11

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

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

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

Здесь есть разумное руководство по началу работы для экрана .

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

0
ответ дан 26.10.2019, 21:10
  • 1
    & quot; Вы не можете сделать это после запуска процесса, вам нужно настроить его, прежде чем запускать долго выполняемое задание. & quot; - нет, вы можете использовать disown для достижения этой цели. Смотрите ответ @ bassgey – haridsv 26.10.2019, 21:11
  • 2
    Byobu использует Tmux в эти дни .. – ffeast 26.10.2019, 21:11
  • 3
    disown и при необходимости просто Ctrl-z, затем bg, чтобы получить его от активного терминала и на задний план. Тогда disown. – ffeast 26.10.2019, 21:11
  • 4
    после того, как изо всех сил, чтобы узнать экран и tmux .... Бёбу слезы на моих глазах – dexhunter 26.10.2019, 21:12

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

Byobu

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

sudo aptitude install byobu

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

su -c 'yum install byobu'

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

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

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

image-byobu

Вы также можете использовать Терминал Byobu на машине с Ubuntu с опцией -X и легко иметь отлично работающую byobu. . [+1122]

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

Запустите byobu, набрав byobu.

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

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

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

    byobu-detach-attach

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

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

0
ответ дан 26.10.2019, 21:11
  • 1
    Я попытался использовать byobu из сеанса на основе PuTTY в своем Ubuntu-окне, но строка состояния повторяется и прокручивается на дисплее. Хотя он отсоединялся должным образом при нажатии клавиши F6, это не было полезным решением в моей настройке. – Piotr Dobrogost 26.10.2019, 21:11
  • 2
    @jfmessier Это потому, что PuTTY не очень хорошо берет ncurses (utf-8). Эту проблему можно устранить, следуя этой теме - stackoverflow.com/questions/10731099/… – Pankrat 26.10.2019, 21:12
  • 3
    Это круто! 1. он дает мне цветное приглашение bash, которое я не могу включить с bash в качестве оболочки по умолчанию, и 2. я могу запустить 2 бота одновременно, и у все еще есть еще один терминал для работы ! @SiddharthaRT Вы заслуживаете возражения, сэр! – lekksi 26.10.2019, 21:12

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

  1. ssh [сервер]
  2. команда
  3. Ctrl + Z
  4. bg
  5. disown [необязательный идентификатор процесса, по умолчанию последний]
  6. выход

Шаг 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.
0
ответ дан 26.10.2019, 21:12
  • 1
    @ tom-brossman: Пожалуйста, следите за ненужными правками , как этот ! При вызове без указания задания встроенная команда disown действует для самого последнего фонового задания. – Joan Venge 26.10.2019, 21:12
  • 2
    Это очень полезно, когда вы уже запустили какую-либо команду и которая выполняется долго. Завершение и запуск в сеансе TMUX займет время – Blixt 26.10.2019, 21:12
  • 3
    Этот ответ должен быть помечен как правильный. Для установки и привыкания экрана для решения этой проблемы преувеличено. – hacksoi 26.10.2019, 21:13
  • 4
    Встроенные модули всегда мой первый выбор :) THX – musiphil 26.10.2019, 21:13

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

disown [-ar] [-h] [ jobspec … | pid … ]

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

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

0
ответ дан 26.10.2019, 21:12
  • 1
    Одним словом предостережения, я остановил запущенный процесс с помощью Ctrl-Z и не запустил его в фоновом режиме, прежде чем вызвать disown, и он убил его. – SDsolar 26.10.2019, 21:13
  • 2
    Может произойти сбой, если он хочет написать в терминал. Перенаправление вывода запущенного процесса не так просто. Лучше начать все правильно с nohup. – Barmar 26.10.2019, 21:13
  • 3
    Отлично. Это прекрасная команда и заслуживает всех голосов! – SDsolar 26.10.2019, 21:13
  • 4
    Это хороший ответ, потому что он прямо отвечает на вопрос. Автор вопроса спросил, что делать после того, как уже выполнил кучу длительных команд. Большинство из этих ответов дают вам знать, что делать до того, как вы выполните команды. – SDsolar 26.10.2019, 21:14
  • 5
    Это также мой любимый способ сделать это. Я часто использую disown -a && exit – Espo 26.10.2019, 21:14

Вы можете сделать это, используя screen.

Введите man screen, чтобы узнать больше, или прочтите эту справочную страницу экрана .

Простой сценарий:

  • ssh в вашу удаленную коробку. Введите screen Затем запустите нужный процесс.

  • Нажмите Ctrl - A , а затем Ctrl - D . Это «отсоединит» ваш сеанс экрана, но оставит ваши процессы запущенными. Теперь вы можете выйти из удаленного окна.

  • Если вы хотите вернуться позже, войдите снова и введите screen -r. Это «возобновит» ваш сеанс экрана, и вы сможете увидеть результаты вашего процесса.

0
ответ дан 26.10.2019, 21:13
  • 1
    Спасибо за это. Это решение работало для меня, а tmux - нет (я использую версию bash для Windows, пока ssh'ing на Linux-машине) – manav m-n 26.10.2019, 21:13
  • 2
    Ссылка не работает – Victor 26.10.2019, 21:13
  • 3
    Обычно я называю свои сеансы экрана, используя screen -S name, чтобы позже было легче подключиться к правильному. – MBerg 26.10.2019, 21:14
  • 4
    Комбинация с screen -S перед уходом и screen -r при возвращении удивительна! – mckenzm 26.10.2019, 21:14
  • 5
    Лично я работаю над коробкой без какой-либо программы контроля пакетов. Потратив примерно полчаса на создание зависимостей для TMUX (с которыми у меня лично есть опыт работы с ним и которые мне нравятся) из источника, стало ясно, что экран для меня - лучшее и более простое решение. TL; DR: оптимальное решение этой проблемы зависит от варианта использования, машины и того, сколько времени вам потребуется на настройку. Спасибо за этот ответ :) – Ghost8472 26.10.2019, 21:14

Вариант 1: nohup

Лучший способ часто самый простой.

nohup long-running-command &

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

man nohup

Вариант 2: bg

Если вы хотите «наложить фон» на некоторые уже выполняющиеся задачи, то лучше всего Ctrl + Z < / kbd> затем запустите

bg

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

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

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

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

0
ответ дан 26.10.2019, 21:13
  • 1
    bg + disown не работает для меня. У меня был запущен скрипт развертывания, я забыл запустить его внутри tmux, и мне нужно было рано уйти на встречу. Скрипт непрерывно выводит прогресс в оболочку. ctrl+z остановил процесс, вернув меня в bash. bg возобновил процесс, но он также возобновил вывод статуса в bash, делая невозможным просмотр того, что я печатал. Однако команда disown выдала «disown: current: no not job» – Mark Amery 26.10.2019, 21:14
  • 2
    это не работало для меня с julia myFile.jl по любой причине. Tmux делает и отлично. – kcwu 26.10.2019, 21:14
  • 3
    Это сработало для меня, большое спасибо – A-B-B 26.10.2019, 21:15
  • 4
    интересно, экран и tmux не работают для майнера, но nohup работает – cyborg_ar 26.10.2019, 21:15
  • 5
    Я бы порекомендовал сделать disown -h – Joan Venge 26.10.2019, 21:15

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

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

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

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

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

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

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

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

0
ответ дан 26.10.2019, 21:14
  • 1
    Этот совет помог мне с той же проблемой, но я думаю, что он включает опечатку. Я совершенно уверен, что вам нужно набрать Ctrl-b, а затем d, чтобы выйти / отключить сеанс tmux. Конечно, это относится к версии tmux на моем Ubuntu 12.04. – Blixt 26.10.2019, 21:15
  • 2
    В качестве альтернативы, запустите tmux detach вместо ввода ctrl-b d – mulllhausen 26.10.2019, 21:15
  • 3
    Я сделал ошибку, следуя приведенным выше инструкциям. Я поделюсь этим, если кто-то может упасть в ту же ошибку: я запустил tmux в оболочке моего собственного компьютера вместо оболочки удаленного компьютера. Нужно запустить tmux в оболочке удаленного компьютера. – Triptych 26.10.2019, 21:15
  • 4
    Экран теперь снова разрабатывается: lists.gnu.org/archive/html/screen-devel/2014-04/msg00024.html Не могли бы вы обновить свой ответ? – Isopycnal Oscillation 26.10.2019, 21:16
  • 5
    @CraigM Используйте screen -x -r [screenname] или screen -rx для краткости, если у вас активен только один сеанс экрана. Это позволяет вам прикрепить существующий экземпляр экрана. – Robert Siemer 26.10.2019, 21:16

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

Пример:

/path/to/my/script &

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

0
ответ дан 26.10.2019, 21:15
  • 1
    @MadsSkjern причина в том, что если вы запустите такие процессы с помощью &, если вы выйдете из системы и войдете в сеанс SSH, процесс все равно будет запущен , однако вы не сможете увидеть < i> вывод этого процесса (если ваш скрипт что-то повторил, вы его не увидите, но если он напишет файл, файл будет там) – pnoob 26.10.2019, 21:15
  • 2
    Да, я могу видеть это и на моей Ubuntu, но это не должно происходить в теории. Я не понимаю почему – Emanuel Lindström 26.10.2019, 21:15
  • 3
    @MadsSkjern Потому что вы не можете вводить какие-либо входные данные в сценарий, используя этот метод. – Tabula Rasa 26.10.2019, 21:16
  • 4
    Да, я хотел бы знать, насколько screen / tmux лучше этого простого решения. – darrell 26.10.2019, 21:16