Запуск в фоне
Ребят, такая задача, через терминал запускаю java -jar selenium-server-standalone-4.0.0-alpha-1.jar и он в терминале работает все как и положенно, но стоит мне закрыть терминал как сразу перестает работать. Как можно сделать чтобы это исполнялось в фоне даже при закрытом терминале? Сервер Debian 10
S1mba
02.03.22 19:54:59 MSK
- Ответить на это сообщение
- Ссылка

targitaj ★★★★★
( 02.03.22 19:56:16 MSK )
- Ответить на это сообщение
- Ссылка
Варианты, тысячи их:
- мультиплексор screen или tmux
- nohup
- юнит systemd
- supervisord
- контейнерезация
- …
В общем и целом, по-правильному, гуглить deploying java app
vvn_black ★★★★★
( 02.03.22 19:59:42 MSK )
Последнее исправление: vvn_black 02.03.22 20:06:08 MSK (всего исправлений: 3)
- Ответить на это сообщение
- Ссылка
написать скрипт для системы управления демонами.
пусть он запускает и держит в рабочем состоянии.
так понимаю системд тогда пишем сервис системд
pfg ★★★★★
( 02.03.22 20:00:57 MSK )
- Ответить на это сообщение
- Ссылка
java -jar selenium-server-standalone-4.0.0-alpha-1.jar >> selenium.log 2>&1 &
затем пишешь в терминал exit или жмёшь ctrl+d (это важно, не надо ждать пока он сам отвалится). Лог будет писаться в файл selenum.log.
Если лог не нужен — то так:
java -jar selenium-server-standalone-4.0.0-alpha-1.jar >> /dev/null 2>&1 &
Ещё можно так (если установлен nohup), иногда оно лучше работает чем варианты выше, но скорее всего разницы не будет:
nohup java -jar selenium-server-standalone-4.0.0-alpha-1.jar &
firkax ★★★★★
( 02.03.22 20:22:09 MSK )
Последнее исправление: firkax 02.03.22 20:23:34 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от firkax 02.03.22 20:22:09 MSK
А разве java -jar selenium-server-standalone-4.0.0-alpha-1.jar >> /dev/null 2>&1 & поможет? Ведь все равно когда закрою терминал она перестанет исполнятся. А мне необходимо чтобы она вечно работала, если свалится с ошитбкой то вновь перезапускалась.
S1mba
( 02.03.22 20:25:00 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от S1mba 02.03.22 20:25:00 MSK
Надо не закрыть терминал а ввести в нём exit, я же написал.
Чтобы перезапускалась сделай скрипт selenium-autorestart.sh
#!/bin/sh while true; do java -jar selenium-server-standalone-4.0.0-alpha-1.jar echo "crashed, restarting" sleep 10 done
сделай chmod +x selenium-autorestart.sh
./selenium-autorestart.sh 1>> /dev/null 2>&1 &
firkax ★★★★★
( 02.03.22 21:02:53 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от firkax 02.03.22 21:02:53 MSK
То есть каждые 10 секунд будет просто перезапускаться java -jar selenium-server-standalone-4.0.0-alpha-1.jar ? А нельзя сделать так чтобы один раз запустило и работало, если приложение крякнется то перезапустило? Извините я полный нуб в этом. Вот пытаюсь понять и освоить материал но пока не получается
S1mba
( 02.03.22 23:46:53 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от S1mba 02.03.22 23:46:53 MSK
Нет, не будет каждые 10 секунд, всё будет норм. Когда java упадёт, через 10 секунд запустится назад.
firkax ★★★★★
( 03.03.22 00:56:53 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от firkax 03.03.22 00:56:53 MSK
Что то пошло не так^ и выдает ошибку element not interactable (Session info: headless chrome=99.0.4844.51) . Теперь даже при ручном запуске java -jar selenium-server-standalone-4.0.0-alpha-1.jar стало выбивать ошибку эту ошибку Как можно остановить выполнение того скрипта?
S1mba
( 03.03.22 02:35:11 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Как остановить nohup в linux
Next: Обзор наиболее употребительных команд Up: Выполнение, останов и повторный Previous: Запуск остановленного задания Contents Index
Все процессы, за исключением at и batch , завершаются, когда вы выходите из системы. Если вы хотите, чтобы после вашего выхода из системы процесс в фоновом режиме продолжал выполняться, то вам необходимо использовать команду nohup . Команда nohup имеет следующий формат:
nohup command &
Предположим, вы хотите, чтобы команда grep осуществила поиск во всех файлах в вашем текущем каталоге строки «word» и перенаправила вывод в файл word.list, и затем, не ожидая завершения, вы хотите выйти из системы, то введите следующую строку:
nohup grep word * > word.list &
Вы можете завершить команду nohup с помощью команды kill .
Alex Otwagin 2002-12-16
5 способов сделать так, чтобы программа не останавливалась после отключения SSH
Если описать работу SSH (Secure Shell — безопасная оболочка) простыми словами, то её функция в том, что это простой способ подключиться к удалённому компьютеру от имени существующего на той системе пользователя с возможностью выполнять команды на ней. В первую очередь это относится к командам с интерфейсом командной строки, но также возможна передача и других видов трафика. В более технических терминах, когда мы подключаемся по ssh к другому пользователю на какой-либо системе и запускаем на той машине команды, то в действительности создаётся псевдо терминал и он подсоединяется к оболочке с входом (login shell) выполнившего вход пользователя.
Когда мы выходим (разлогиниваемся) из сессии, или сессия закрывается после таймаута из-за неактивности в течение определённого времени, то сигнал SIGHUP отправляется псевдо терминалу и все работы, которые были запущены в этом терминале, даже работы, которые имеют их родительские работы инициированные в псевдо терминале, также получают сигнал SIGHUP для принудительного закрытия.
Только работы, которые были настроены для игнорирования этого сигнала, переживают терминацию сессии. На системах Linux есть много способов сделать эти работы запущенными на удалённом сервере или любой машине даже после выхода пользователя и терминации сессии.
Основы о процессах в Linux
Нормальные процессы
Нормальные процессы это те, у которых продолжительность жизни ограничивается сеансом. Они запускаются во время сессии как процессы переднего плана и завершаются через определённое время или когда сессия прекращается из-за выхода пользователя. Эти процессы имеют своего владельца, которым является любой валидный пользователь системы, включая root.
Осиротевшие процессы
Осиротевшие процессы это те, которые изначально имели родительский, создавший их процесс, но после некоторого времени родительский процесс непреднамеренно завершил работу или остановился из-за ошибки, что сделало init родителем данного процесса. Такие процессы имеют init в качестве их непосредственного родителя, который ожидает от этих процессов остановки или завершения их работы.
Процессы демонов
Это процессы, которые намеренно сделаны осиротевшими. Процессы, которые намеренно оставлены работающими в системе, называются демонами или намеренно осиротевшими процессами. Обычно это процессы с длительным выполнением, которые после инициации были отсоединены от контролирующего терминала чтобы они могли работать в фоне, пока они не завершать их задачи или пока в них не возникнет ошибка. Родители таких процессов намеренно завершают свою работу, делая так, что дочерний процесс выполняется в фоне.
Техники для сохранения запущенной SSH сессии после отключения
Могут быть различные способы оставить ssh сессию запущенной после отключения, они описаны далее:
1. Использование команды screen для сохранения запущенных сессий SSH
screen — это текстовый менеджер окон для Linux, который позволяет пользователям управлять несколькими сессиями терминала одновременно, переключаться между сессиями, вести журнал действий в сессии для запущенных в screen сессий и даже возобновлять сессии в любой время по нашему желанию не беспокоясь о том, что произойдёт выход из сессии или терминал будет закрыт.
Сессии screen могут быть запущены и затем отсоединены от контролирующего терминала, что оставит их запущенными в фоне и затем их можно заново подсоединить в любое время и даже в любом месте (выполнив вход по SSH с другого компьютера). Всё что нужно, это запустить сессию в screen и когда вы хотите, отсоединить её от псевдо терминала (или контрольного терминала) и выйти из сессии. Когда нужно, вновь выполните вход по SSH и возобновите сессию.
После запуска команды screen, вы будете внутри новой сессии screen, в этой сессии вы можете создавать новые окна, перемещаться между окнами, блокировать окна и делать многое другое, что вы можете делать в обычном терминале:
screen
Теперь, когда сессия session запущена, можно запустить любую команду и сохранить сессию на случай отключения выполнив отсоединение сессии.
Отсоединение экрана screen
Когда вы хотите отключиться от удалённой сессии, но хотите созданную вами сессию сохранить живой, то вам просто нужно отсоединить screen от терминала, чтобы у него не осталось контролирующего терминала. После этого вы можете безопасно отключиться.
Для отсоединения screen от удалённого терминала просто нажмите Ctrl+a, а затем нажмите d и вы вернётесь в терминал, в котором увидите сообщение, что Screen отсоединён. Всё готово — можно выходить из сессии (например, отключиться от SSH), а запущенный в эту сессию процесс останется работать.
Возобновление отсоединённой сессии screen
Если вы хотите возобновить отсоединённую сессию screen, которую вы оставили перед тем как отключиться, просто снова повторно залогинтесь на удалённом терминале и наберите
screen -r
Предыдущая команда подходит если у вас только одна сессия screen.
Если открыто несколько сессий screen, то после опции -r нужно указать её индивидуальный идентификатор.
Следующая команда при нескольких запущенных сессиях выведет их список с идентификаторами:
screen -r
Для подключения к одной из них нужно ввести команду вида:
screen -r
2. Использование Tmux (мультиплексора терминалов) чтобы программа работала после отключения от SSH
Tmux — это ещё одна программ, которая создана на замену screen. В ней имеется большинство возможностей screen, а также несколько дополнительных функций, которые делают её более мощной чем screen.
Она позволяет, кроме всех других опций, которые предлагает screen, разделение экрана терминала по горизонтали и вертикали, чтобы иметь сразу несколько консолей, позволяет изменять размер этих панелей, имеется мониторинг активности сессий, поддержка скриптов используя режим командной строки и т. д. Благодаря этим функциям tmux, он имеется практически во всех дистрибутивах Unix и даже был включён в базовую систему OpenBSD.
Запуск сессии Tmux
После подключения к удалённому хосту по SSH, наберите в командной строке:
tmux
Вы откроете новую сессию с новым окном — здесь вы можете делать всё что угодно как в обычном терминале.
После выполнения ваших операций в терминале, вы можете отсоединить эту сессию от контрольного терминала, чтобы она перешла в фон, и вы смогли безопасно отключиться от SSH.
Отсоединение сессии Tmux от терминала
В запущенной сессии tmux вы можете набрать:
tmux detach
Либо вы можете использовать сочетание клавиш, нажмите Ctrl+b, а затем нажмите d. После этого ваша текущая сессия будет отсоединена и вы вернётесь в ваш терминал, который вы можете безопасно закрыть (отключиться от SSH).
Возобновление фоновой сессии Tmux
Чтобы повторно открыть сессию, которую вы отсоединили и вернуть всё в то состояние, в котором находился терминал до того, как вы отключились от системы, просто повторно залогинтесь на удалённую машину и наберите
tmux attach
чтобы подсоединить закрытую сессию. Она вернётся, и запущенная в ней программа будет работать как прежде.
Чтобы узнать больше о tmux, о его возможностях и других командах и комбинациях клавиш, смотрите статью «Как пользоваться tmux для создания нескольких терминалов внутри одной консоли».
3. Использование команды nohup чтобы программа не закрывалась после отключения от SSH
Если вы не особо знакомы со screen или tmux вы можете использовать nohup и отправить вашу долго выполняющуюся команду в фон, чтобы вы могли продолжать работать в терминале, пока команда будет выполняться в фоне. Также при переводе команды в фон вы можете отключиться от удалённой системы, не опасаясь, что запущенная программа будет остановлена.
С командой nohup мы говорим процессу игнорировать сигнал SIGHUP который отправляется сессией ssh при её завершении, это делает команду устойчивой даже после выхода из сессии. При отключении от сессии, команда отсоединяется от контролирующего терминала и продолжает работать в фоне как процесс демона.
Выполнение команды в фоне используя nohup
Это простой сценарий в котором во время сессии SSH мы запустили команду find для поиска файлов в фоне используя nohup. При отправке работы в фон в приглашение терминала возвращается JOBID и PID процесса.
nohup find / -type f $gt; files_in_system.out 2>1 &
Возобновление сессии для просмотра всё ещё работающей задачи
Когда вы повторно залогинитесь, вы можете проверить статус команды, вернув её на передней план:
fg %JOBID
%JOBID — это цифра в квадратных скобках, например [1], тогда для перевода её на передней план введите:
fg 1
Если программа уже завершила свою работу, то вы увидите что-то вроде:
bash: fg: 1: нет такого задания
По умолчанию программа также сохраняет свой вывод в файл nohup.out — в противном случае, после завершения программы уже не получится вернуть данные, которые вывела программа.
При переводе на передний план программа не показывает свой вывод — в этом состоянии её можно только остановить комбинацией CTRL+c.
4.Использование команды disown для сохранения запущенной сессии SSH
Другим элегантным способом позволить вашей команде или единичной задаче работать в фоне и оставаться активной даже после выхода из сессии является использование disown.
Disown удаляет работу из списка процессов работ системы, таким образом, процесс защищён от уничтожения во время отключения сеанса, поскольку он не получит SIGHUP от оболочки при выходе из системы.
Недостаток этого метода заключается в том, что его следует использовать только для заданий, которые не нуждаются в вводе из stdin (стандартного ввода) и не нуждаются в записи в stdout (стандартный вывод), если только вы не перенаправите ввод и вывод заданий, потому что, когда задание будет пытаться взаимодействовать со стандартным вводом или стандартным выводом, процесс остановится.
Выполнение команды с использованием disown в фоновом режиме
Ниже мы отправили команду ping в фоновый режим, чтобы она продолжала работать и была удалена из списка заданий. Как видно, задание было сначала приостановлено, после чего оно все ещё оставалось в списке заданий с идентификатором процесса: 4910.
ping zalinux.ru > pingout & jobs -l disown -h %1 ps -ef | grep ping
После этого работе был передан сигнал disown и она была удалена из списка работ, хотя ещё и запущена в фоне. Работа должна ещё быть запущена, когда вы повторно зайдёте на удалённый сервер:
ps -ef | grep ping
5. Использование команды setsid для поддержания сессии SSH в запущенном состоянии
Другой утилитой для достижения требуемого поведения является setsid. Nohup имеет недостаток в том смысле, что группа процессов процесса остаётся неизменной, поэтому процесс, запущенный с помощью nohup, уязвим для любого сигнала, отправляемого всей группе процессов (например, Ctrl+C).
С другой стороны, setsid распределяет новую группу процессов для выполняемого процесса, и, следовательно, созданный процесс полностью находится во вновь выделенной группе процессов и может безопасно выполняться, не опасаясь быть уничтоженным даже после выхода из сеанса.
Выполните любую команду, используя setsid
Здесь это показывает, что процесс ‘sleep 10m‘ был отсоединён от управляющего терминала с момента его создания.
setsid sleep 10m ps -ef | grep sleep
Теперь, когда вы повторно войдете в сеанс, вы все равно обнаружите, что этот процесс запущен.
ps -ef | grep [s]leep
Заключение
Если вы знаете другие способы, как сделать так, чтобы процесс продолжал работать даже после отключения от SSH (закрытия терминала), то обязательно укажите их в комментариях.
Связанные статьи:
- Как закрыть терминал без убийства запущенной в нём команды (76.8%)
- Как пользоваться screen для управления терминалами Linux и отсоединения процессов от терминала (66.7%)
- Как пользоваться tmux для создания нескольких терминалов внутри одной консоли (66.7%)
- Terminator: эмулятор терминала для управления несколькими окнами терминала на Linux (51.5%)
- Различия между Login shell и Non login shell (оболочка с входом и оболочка без входа) (51.5%)
- Как записать терминальную сессию (RANDOM — 1.5%)
Команда nohup в Unix/Linux


nohup — утилита, которая позволяет запустить команду, защищенную от зависания с выходом на non-tty (игнорирует потерю сигналов связи SIGHUP). Если стандартным выводом (stdout) команды является терминал, то он и стандартный вывод ошибок (stderr) перенаправляются с добавлением в файл «nohup.out» в текущей директории; если это невозможно сделать, то перенаправление происходит в файл «$HOME/nohup.out». Если и это невозможно сделать, то команда не запускается совсем. При создании файлов «nohup.out» или «$HOME/nohup.out» команда nohup устанавливает им атрибуты доступа только для владельца этих файлов (группа и остальные пользователи не имеют прав доступа к этим файлам). Если же эти файлы уже существуют, то их права доступа не изменяются.
Команда nohup в Unix/Linux
Некоторая работа или команда занимает много времени. Если вы не уверены, когда закончится задание, лучше оставить работу в фоновом режиме. Все процессы (кроме at и batch), выполняют завершение при выходе из системы. Утилита nohup дает возможность, чтобы при выходе из системы процесс продолжал работу в фоновом режиме. Например:
# nohup command Arg(s) &
- command: Это имя скрипта или клманды которую запускаете. Так же, вы можете передать аргумент(ы) команде или скрипту.
- Arg(s) — Это аргумент(ы) для команды или скрипта( можно не прописывать).
- & : Чтобы nohup работал в фотоновом режиме, используйте & символ.
Приведу очень наглядный пример. Допустим, вам нужно выполнить grep по определенному слову «ddos» и при поступлении данных ( допустим ДДОС или что-то еще), то можно запустить grep с нужным словом для поиска в фоновом режиме. Он будет находить нужные слова и записывать в определенный файл:
# nohup grep ddos * > /home/captain/ddos.txt &
# nohup cat /var/log/nginx/access.log| grep "admin" > /home/captain/bruteforce.txt &
И смотрим на процесс:
# ps -aux | grep nohup
Вы можете завершить команду nohup с помощью команды kill.
Вот еще пример того, как можно запускать сервер nginx в фоновом режиме:
# nohup service nginx start > /dev/null 2>&1&
В этом примере я собираюсь найти все утилиты/скрипты с setuid битом:
# nohup find / -xdev -type f -perm +u=s -print > /home/output.txt &
Обратите внимание, что nohup не изменяет приоритет ; Для этого используйте «nice» команду:
# nohup nice -n -5 ls / > /home/some_output.txt &
Опции nohup в Unix/Linux
Чтобы вывести помощь:
$ nohup --help
Для отображения версии, используйте:
$ nohup --version
А на этом, у меня статья «Команда nohup в Unix/Linux» подошла к завершению.
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Рубрики
- Arch Linux (167)
- Commands (36)
- Debian’s (635)
- Administration tools Ubuntu (37)
- Backups Debian’s (7)
- Database в Ubuntu (58)
- Games (игры) (1)
- Monitoring в Debian и Ubuntu (49)
- Virtualization в Ubuntu / Debian/ Linux Mint (41)
- Docker (22)
- Kubernetes (6)
- KVM (4)
- OpenVZ (3)
- Vagrant (5)
- VirtualBox (6)
- ArgoCD (1)
- Concourse (1)
- Gitlab (1)
- Jenkinks (4)
- Spinnaker (1)
- Apache (32)
- Cherokee (1)
- FTP-services (5)
- Lighttpd (1)
- Nginx (26)
- PHP (27)
- Proxy для Debian’s (2)
- Tomcat (4)
- Панели управления в Ubuntu/Debian/Mint (24)
- Установка и настройка почты на Ubuntu/Debian (12)
- Хранилища (clouds) (2)
- Administration tools freeBSD (19)
- Database во FreeBSD (52)
- Monitoring во freeBSD (37)
- Virtualization во FreeBSD (22)
- VoIP (1)
- Установка Web сервисов (91)
- Установка и настройка почты (6)
- Установка из ports (пакетов) (19)
- Установка из sorce code (исходников) (23)
- Непрерывная интеграция (CI) (27)
- Database в MacOS (36)
- Monitoring в Mac OS (31)
- Security (безопасность) (12)
- Virtualization в Mac OS (30)
- Docker (19)
- Kubernetes (6)
- Vagrant (5)
- VirtualBox (5)
- ArgoCD (1)
- CircleCI (1)
- Concourse (1)
- Gitlab (1)
- Jenkinks (4)
- Spinnaker (1)
- Administration tools CentOS (49)
- Backups RPM’s (4)
- Database в CentOS (68)
- Monitoring в CentOS (67)
- Virtualization в CentOS/ Red Hat/ Fedora (42)
- Docker (23)
- Kubernetes (6)
- KVM (5)
- OpenVZ (2)
- Vagrant (5)
- VirtualBox (6)
- VMWare (3)
- ArgoCD (1)
- Concourse (1)
- Gitlab (1)
- Jenkinks (4)
- Spinnaker (1)
- Apache (35)
- Cherokee (1)
- DNS (3)
- FTP (10)
- Nginx (33)
- PHP (34)
- Proxy для RedHat’s (2)
- Tomcat (2)
- Voice (2)
- Панели управления в CentOS/Red Hat/Fedora (27)
- Прокси сервер на CentOS/RHEL/Fedora (4)
- Установка и настройка почты на CentOS/RHEL/Fedora (14)
- Хранилища (clouds) (1)
соц сети



Архив новостей
Свежие записи
- Pull/Push AWS ECR образов через AWS Route53 CNAME 17.11.2021
- openpgp: signature made by unknown entity в Terraform 09.11.2021
- Установка Terraformer в Unix/Linux 31.05.2021
- Установка ArgoCD в Unix/Linux 06.01.2021
- Установка tfswitch в Unix/Linux 08.12.2020
Свежие комментарии
- Вадим к записи Переключить версию python в Unix/Linux
- Максим к записи Сохраняем все резервные копии в Dropbox
- Артём к записи Переключить версию python в Unix/Linux
- Владислав к записи Добавить Swap в CentOS/Fedora/RedHat
- Александр к записи Закомментировать/Раскомментировать строки vi/vim в Unix/Linux