При хранении процесса Linux, бегущего, я выхожу из системы

Если Вы были бы хорошо с каким-либо из следующих кодов ответа: 200, 400, 403, 405, 408, 429, 500, 502, 503, или 504.

Затем Вы могли сделать что-то вроде этого:

frontend www
  ...
  default_backend no-match

backend no-match
  http-request deny deny_status 400

142
задан 26 November 2014 в 21:42
9 ответов

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


Мультиплексор терминала предоставляет «виртуальные» терминалы, которые работают независимо от «реального» терминала (фактически все терминалы сегодня «виртуальные», но это другая тема на другой день). Виртуальный терминал будет продолжать работать, даже если ваш реальный терминал закрыт с вашим сеансом ssh.

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

Два популярных терминальных мультиплексора - screen и tmux .

Экран требует обучения. Вот хорошее руководство с диаграммами, объясняющими концепцию: http://www.ibm.com/developerworks/aix/library/au-gnu_screen/


Сигнал HUP (или SIGHUP) отправляется терминалом всем его дочерним процессам, когда терминал закрыт. Обычное действие при получении SIGHUP - завершить работу. Таким образом, когда ваш сеанс ssh будет отключен, все ваши процессы завершатся. Чтобы избежать этого, вы можете сделать так, чтобы ваши процессы не получали SIGHUP.

Два простых способа сделать это: nohup и disown .

Для получения дополнительной информации о том, как nohup и disown работы прочтите этот вопрос и ответ: https://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and

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

135
ответ дан 28 November 2019 в 19:17

In bash, the disown keyword is perfectly suited to this. First, run your process in the background (either use &, or ^Z then type bg):

$ wget --quiet http://server/some_big_file.zip &
[1] 1156

By typing jobs you can see that the process is still owned by the shell:

$ jobs
[1]+  Running  wget

If you were to log out at this point, the background task would also get killed. However, if you run disown, bash detaches the job and allows it to continue running:

$ disown

You can confirm this:

$ jobs
$ logout

You can even combine the & and disown on the same line, like:

$ wget --quiet http://server/some_big_file.zip & disown
$ logout

This is better than running nohup in my opinion because it doesn't leave nohup.out files littered all over your filesystem. Also, nohup must be run before you run the command — disown can be used if you only decide later on that you want to background and detach the task.

73
ответ дан 28 November 2019 в 19:17

Есть несколько способов сделать это, но я считаю наиболее полезным использовать Экран GNU .

После того, как вы запустите ssh, запустите screen . Это запустит другую оболочку, работающую на экране. Запустите вашу команду, затем выполните Ctrl - a d .

Это «отключит» вас от сеанса экрана. На этом этапе вы можете выйти из системы или сделать что-нибудь еще.

Если вы хотите повторно подключиться к сеансу экрана, просто запустите screen -RD из приглашения оболочки (как того же пользователя, который создал сеанс).

но наиболее полезным я считаю использование GNU Screen .

После того, как вы запустите ssh, запустите screen . Это запустит другую оболочку, работающую на экране. Запустите вашу команду, затем выполните Ctrl - a d .

Это «отключит» вас от сеанса экрана. На этом этапе вы можете выйти из системы или сделать что-нибудь еще.

Если вы хотите повторно подключиться к сеансу экрана, просто запустите screen -RD из приглашения оболочки (как того же пользователя, который создал сеанс).

но наиболее полезным я считаю использование GNU Screen .

После того, как вы запустите ssh, запустите screen . Это запустит другую оболочку, работающую на экране. Запустите вашу команду, затем выполните Ctrl - a d .

Это «отключит» вас от сеанса экрана. На этом этапе вы можете выйти из системы или сделать что-нибудь еще.

Если вы хотите повторно подключиться к сеансу экрана, просто запустите screen -RD из приглашения оболочки (как того же пользователя, который создал сеанс).

92
ответ дан 28 November 2019 в 19:17

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

tmux задуман как современный BSD- лицензионная альтернатива программам типа GNU screen. Основные функции:

  • Мощный, согласованный, хорошо документированный и легко настраиваемый через сценарии командный интерфейс.
  • Окно может быть разделено по горизонтали и вертикали на панели.
  • Панели можно свободно перемещать и изменять их размер, а также располагать по предустановкам макеты.
  • Поддержка UTF-8 и 256-цветных терминалов.
  • Копирование и вставка с несколькими буферами.
  • Интерактивные меню для выбора окон, сеансов или клиентов.
  • Изменение текущего окна с помощью поиска по тексту в цели.
  • Блокировка терминала, вручную или после тайм-аута.
  • Чистая, легко расширяемая, лицензированная BSD кодовая база, находится в стадии активной разработки.

Это,

27
ответ дан 28 November 2019 в 19:17

Инструмент nohup, доступный на большинстве компьютеров с Linux, сделает это.

37
ответ дан 28 November 2019 в 19:17

Вот способ демонизировать любой процесс оболочки, никаких внешних программ не требуется:

( while sleep 5; do date; done ) <&- >output.txt &

Когда вы затем закроете сеанс, задание будет продолжать выполняться, как показано в файле output.txt (который имеет буферизацию, поэтому требуется некоторое время, чтобы показать ненулевое значение). Не забудьте убить свою работу после тестирования.

Все, что вам нужно сделать, это закрыть стандартный ввод и выполнить задание в фоновом режиме. Чтобы быть действительно хорошим, сначала cd / , чтобы вы не держались за монтировку.

Это работает даже в простой sh под Solaris.

9
ответ дан 28 November 2019 в 19:17

Экран лишен возможности просто поддерживать работу процессов при выходе из системы.

Попробуйте dtach :

dtach - это программа, написанная на C, которая имитирует функцию отсоединения экран, который позволяет выполнять программу в среде, которая защищен от управляющего терминала. Например, программа под управлением dtach не будет зависеть от терминала отключился по какой-то причине.

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

также мешал мне использовать полноэкранные приложения, такие как emacs и ircII из-за чрезмерной интерпретации потока между программой и подключенными терминалами. dtach не имеет слой эмуляции терминала и передает необработанный выходной поток программу к подключенным терминалам. Единственная обработка ввода, которая dtach выполняет сканирование в поисках символа отсоединения (который сигнализирует dtach для отключения от программы) и обработка ключа приостановки (который сообщает dtach временно приостановить себя, не влияя на запущенная программа), и оба из них при желании могут быть отключены.

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

11
ответ дан 28 November 2019 в 19:17

Команда at может быть полезна в такой ситуации. Например, введите:

at now

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

Вместо сейчас вы можете указать время, необязательно с датой, или выражение времени, например сейчас + 15 минут . См. man на для более подробной информации.

7
ответ дан 28 November 2019 в 19:17

byobu в Ubuntu - хороший интерфейс для экрана. Нажав Ctrl - ? , вы получите список всех сочетаний клавиш. Он добавляет строку состояния, которая может быть полезна для наблюдения за загрузкой ЦП, дисковым пространством и т. Д. В целом он обеспечивает взаимодействие, которое я бы описал как соединение VNC на основе терминала.

nohup позволяет запускать задание в фоновом режиме с помощью его вывод направляется в файл журнала, который всегда можно перенаправить в / dev / null, если он не требуется.

7
ответ дан 28 November 2019 в 19:17

Теги

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