Я работаю на машине Linux через SSH (Putty). Мне нужно оставить процесс работающим ночью, поэтому я подумал, что могу сделать это, запустив процесс в фоновом режиме (с амперсандом в конце команды) и перенаправив стандартный вывод в файл.
К моему удивлению, это не работает. Как только я закрываю окно Putty, процесс останавливается.
Как я могу предотвратить это?
linux
process
ssh
background-process
Получить бесплатно
источник
источник
nohup command > /dev/null 2>&1 &
для запуска в фоновом режиме, не создавая вывод stdout или stderr (безnohup.out
файла)nohup
не помогает в этом случае. Есть ли способ возиться сCtrl+Z
/bg
?Я бы порекомендовал использовать GNU Screen . Это позволяет вам отключиться от сервера, пока все ваши процессы продолжают работать. Я не знаю, как я жил без него, прежде чем я знал, что это существует.
источник
Когда сеанс закрыт, процесс получает сигнал SIGHUP, который он явно не перехватывает. Вы можете использовать
nohup
команду при запуске процесса или встроенную команду bashdisown -h
после запуска процесса, чтобы этого не происходило:источник
демон? поЬир? SCREEN? (tmux ftw, экран мусорный ;-)
Просто сделайте то, что делало любое другое приложение с самого начала - двойную вилку.
Взрыв! Готово :-) Я использовал это бесчисленное количество раз на всех типах приложений и на многих старых машинах. Вы можете комбинировать с перенаправлениями и так далее, чтобы открыть частный канал между вами и процессом.
Создайте как coproc.sh:
а потом
И там вы идете, икру что угодно. <(:) открывает анонимный канал через подстановку процесса, которая умирает, но канал остается на месте, потому что у вас есть дескриптор. Я обычно делаю
sleep 1
вместо,:
потому что это немного грубовато, и я получаю ошибку «file busy» - никогда не происходит, если выполняется настоящая команда (например,command true
)"Heredoc Sourcing":
Это работает на каждой оболочке, которую я когда-либо пробовал, включая busybox / etc (initramfs). Я никогда не видел, чтобы это было сделано раньше, я самостоятельно обнаружил это, подталкивая, кто знал, что источник может принимать аргументы? Но это часто служит гораздо более управляемой формой оценки, если такая вещь существует.
источник
ssh myhost "((exec sleep 500)&) >/dev/null"
ssh myhost 'sleep 500 >&- 2>&- <&- &'
TMTOWTDI;)Замените имя вашего процесса на бла!
источник
Лично мне нравится команда «партия».
Это заполняет его фоном, а затем отправляет результаты вам по почте. Это часть cron.
источник
Как уже отмечали другие, для запуска процесса в фоновом режиме, чтобы вы могли отключиться от сеанса SSH, необходимо, чтобы фоновый процесс должным образом отсоединился от своего управляющего терминала - это псевдотерминал, используемый сеансом SSH.
Вы можете найти информацию о демонизирующих процессах в книгах, таких как "Расширенная сетевая программа Стивенса", том 1, 3-й Эдн "или" Расширенное программирование Unix "Рочкинда.
Недавно мне (в последние пару лет) пришлось столкнуться с непокорной программой, которая не демонизировалась должным образом. Я закончил с этим, создав универсальную демонизирующую программу - похожую на nohup, но с большим количеством доступных элементов управления.
Двойная тире необязательна в системах, не использующих функцию GNU getopt (); это необходимо (или вы должны указать POSIXLY_CORRECT в среде) в Linux и т. д. Поскольку двойная черта работает везде, лучше всего ее использовать.
Вы все еще можете связаться со мной (имя, точка, фамилия на gmail, точка com), если вы хотите источник для
daemonize
.Тем не менее, код теперь (наконец) доступен на GitHub в моем репозитории SOQ (вопросы о переполнении стека) в виде файла
daemonize-1.10.tgz
в подкаталоге пакетов .источник
В системе на основе Debian (на удаленной машине) Установите:
Использование:
Чтобы переименовать сессию:
Чтобы выйти из сеанса:
(это оставляет сессию tmux). Затем вы можете выйти из SSH.
Когда вам нужно вернуться / проверить это снова, запустите SSH и введите
Это вернет вас к сеансу tmux.
источник
Для большинства процессов вы можете псевдо-демонизировать, используя этот старый трюк командной строки Linux:
Например:
Затем запустите новое окно терминала и:
Покажет что
sleep 30
еще работает.Что вы сделали, так это запустили процесс, будучи ребенком ребенка, и когда вы выходите,
nohup
команда, которая обычно запускает выход процесса, не переходит к дочернему процессу, оставляя его как процесс-сироту, все еще работающий ,Я предпочитаю этот «настроил и забыл» подход, нет необходимости иметь дело с
nohup
,screen
, tmux, Перенаправление ввода / вывода, или любой из этих вещей.источник
Если вы используете экран для запуска процесса от имени пользователя root, остерегайтесь возможности атак с повышением привилегий. Если ваша собственная учетная запись каким-либо образом будет скомпрометирована, будет прямой путь к захвату всего сервера.
Если этот процесс необходимо запускать регулярно и у вас есть достаточный доступ к серверу, лучшим вариантом будет использование cron для запуска задания. Вы также можете использовать init.d (супер-демон) для запуска вашего процесса в фоновом режиме, и он может завершиться, как только это будет сделано.
источник
nohup
очень хорошо, если вы хотите записать свои данные в файл. Но когда дело доходит до фона, вы не можете дать ему пароль, если ваши скрипты просят. Я думаю, что вы должны попробоватьscreen
. Это утилита, которую вы можете установить в своем дистрибутиве Linux с помощью yum, например, на CentOS, аyum install screen
затем получить доступ к вашему серверу с помощью замазки или другого программного обеспечения в вашей оболочке.screen
. Откроется экран [0] в замазке. Делай свою работу. Вы можете создать больше экрана [1], экрана [2] и т. Д. В одном сеансе замазки.Основные команды, которые вам нужно знать:
Для запуска экрана
экран
К с reate следующего экрана
Ctrl + A + C
Перейти к п экрану внутра вы создали
Ctrl + A + N
К г etach
Ctrl + A + D
Во время работы закройте замазку. И в следующий раз при входе через шпаклевку
экран -r
Для повторного подключения к экрану, и вы можете увидеть, что ваш процесс все еще работает на экране. И для выхода из экрана наберите #exit.
Для более подробной информации см
man screen
.источник
yum
это правильный инструмент, когда вы не знаете дистрибутив, это не хорошо. Вы должны четко указать, на какие дистрибутивыscreen
можно установитьyum
.Nohup позволяет клиентскому процессу не быть убитым, если родительский процесс убит, для аргумента при выходе из системы. Еще лучше еще использовать:
Nohup делает процесс, который вы запускаете, невосприимчивым к завершению, которое сеанс SSH и его дочерние процессы уничтожают при выходе из системы. Команда, которую я дал, предоставляет вам способ сохранить pid приложения в pid-файле, чтобы вы могли корректно уничтожить его позже и позволить процессу запускаться после выхода из системы.
источник
Используйте экран. Он очень прост в использовании и работает как vnc для терминалов. http://www.bangmoney.org/presentations/screen.html
источник
Если вы также хотите запускать X-приложения - используйте xpra вместе с «screen».
источник
Я также хотел бы пойти на экран программы (я знаю, что еще один ответ был экран, но это завершение)
не только тот факт, что &, ctrl + z bg disown, nohup и т. д. может преподнести вам неприятный сюрприз, что когда вы выйдете из системы, работа все равно будет убита (я не знаю почему, но это случилось со мной, и это не беспокоило с этим, потому что я переключился на использование экрана, но я думаю, что решение anthonyrisinger, поскольку двойное разветвление решило бы это), также у экрана есть главное преимущество перед просто отступлением:
и кстати, это вопрос, который я бы никогда не задал в первую очередь :) ... я использую экран с самого начала, чтобы что-то делать в любом Unix ... я (почти) НИКОГДА не работаю в оболочке Unix / Linux без начального экрана во-первых ... и я должен остановиться сейчас, или я начну бесконечное представление о том, что такое хороший экран и что может для вас сделать ... посмотрите сами, оно того стоит;)
источник
&
(асинхронное выполнение) было введено оболочкой Томпсона в 1971 году для первой версии UNIX ... так что буквально "всегда было" ;-) увы, Я был слишком консервативен - на самом деле это был 41 год.Также есть команда daemon из пакета с открытым исходным кодом libslack.
daemon
вполне настраивается и заботится обо всех утомительных вещах демона, таких как автоматический перезапуск, ведение журнала или обработка pidfile.источник
Добавьте эту строку в вашу команду:> & - 2> & - <& - &. > & - означает закрытый стандартный вывод. 2> & - означает закрыть stderr. <& - означает закрытие стандартного ввода. & означает запуск в фоновом режиме. Это также работает для программного запуска задания через ssh:
источник
Я использовал экранную команду. Эта ссылка подробно о том, как это сделать
https://www.rackaid.com/blog/linux-screen-tutorial-and-how-to/#starting
источник
Принятый ответ предлагает использовать nohup . Я бы предпочел использовать pm2 . Использование pm2 по сравнению с nohup имеет много преимуществ, таких как поддержание приложения в рабочем состоянии, поддержка файлов журналов для приложения и многое другое. Для более подробной информации проверьте это .
Для установки pm2 необходимо скачать npm . Для системы на основе Debian
и для Redhat
Или вы можете следовать этим инструкциям . После установки npm используйте его для установки pm2
После того, как все готово, вы можете начать
Для мониторинга процесса используйте следующие команды:
Управляйте процессами, используя имя приложения или идентификатор процесса, или управляйте всеми процессами вместе:
Файлы журналов можно найти в
Двоичные исполняемые файлы также могут быть запущены с использованием pm2. Вы должны внести изменения в файл Джейсона. Измените
"exec_interpreter" : "node"
, на"exec_interpreter" : "none".
(см. Раздел атрибутов ).Компиляция кода выше
и запустить его с np2 в фоновом режиме
источник
В systemd / Linux systemd-run - хороший инструмент для запуска независимых от сессии процессов. Ненавистники пусть ненавидят
источник