Я подключаюсь к серверу Linux через замазку SSH. Я попытался запустить его в качестве фонового процесса, как это:
$ node server.js &
Однако через 2,5 часа терминал становится неактивным, и процесс умирает. Могу ли я в любом случае поддерживать процесс, даже если терминал отключен?
Редактировать 1
На самом деле, я пытался nohup
, но как только я закрываю терминал Putty SSH или отключаю интернет, серверный процесс сразу останавливается.
Что-нибудь, что я должен сделать в Замазке?
Изменить 2 (февраль 2012 г.)
Есть node.js
модуль, навсегда . Он будет запускать сервер node.js как сервис-демон.
node.js
linux
background-process
murvinlai
источник
источник
exit
. Когда я просто закрываю окно Putty, это не удается.Ответы:
Простое решение (если вы не хотите возвращаться к процессу, просто хотите, чтобы оно продолжалось):
Также есть
jobs
команда, чтобы увидеть индексированный список этих фоновых процессов. И вы можете убить фоновый процесс, запустив егоkill %1
илиkill %2
указав номер, являющийся индексом процесса.Мощное решение (позволяет повторно подключиться к процессу, если он интерактивный):
Затем вы можете отсоединиться, нажав Ctrl + a + d, а затем присоединиться обратно, запустив
screen -r
Также рассмотрите более новую альтернативу screen, tmux.
источник
sudo bash
.nohup node server.js > /dev/null 2>&1 &
nohup
означает: не прекращайте этот процесс, даже если stty отключен.> /dev/null
означает: stdout идет в / dev / null (это фиктивное устройство, которое не записывает какой-либо вывод).2>&1
означает: stderr также переходит в стандартный вывод (который уже перенаправлен/dev/null
). Вы можете заменить & 1 на путь к файлу, чтобы вести журнал ошибок, например:2>/tmp/myLog
&
в конце означает: запустить эту команду в качестве фоновой задачи.источник
/dev/null
? Хорошая регистрация ... Удачи в попытке отладить это ...Вы действительно должны попытаться использовать
screen
. Это немного сложнее, чем просто делатьnohup long_running &
, но понять экран, как только вы никогда не вернетесь.Сначала запустите сеанс экрана:
Запустите все, что вы хотите:
Нажмите Ctrl + A и затем d. Выполнено. Ваша сессия продолжается в фоновом режиме.
Вы можете составить список всех сессий
screen -ls
и присоединиться к некоторым с помощьюscreen -r 20673.pts-0.srv
команды, где 0673.pts-0.srv - это список записей.источник
Это старый вопрос, но он высоко оценен в Google. Я почти не могу поверить в ответы с наибольшим количеством голосов, потому что запуск процесса node.js в сеансе экрана
&
сnohup
флагом или даже с флагом - все они - просто обходные пути.Специально решение screen / tmux, которое действительно следует рассматривать как любительское решение. Screen и Tmux предназначены не для поддержки процессов, а для мультиплексирования сеансов терминала. Это нормально, когда вы запускаете скрипт на своем сервере и хотите отключиться. Но для сервера node.js вы не хотите, чтобы ваш процесс был подключен к терминальной сессии. Это слишком хрупко. Чтобы все работало, вам нужно демонизировать процесс!
Есть много хороших инструментов для этого.
PM2 : http://pm2.keymetrics.io/
Одно большое преимущество, которое я вижу в пользу PM2, заключается в том, что он может генерировать сценарий запуска системы, чтобы процесс продолжался между перезапусками:
Где
platform
можноubuntu|centos|redhat|gentoo|systemd|darwin|amazon
.forever.js : https://github.com/foreverjs/forever
Сценарии инициализации :
Я не буду вдаваться в подробности о том, как написать сценарий инициализации, потому что я не являюсь экспертом в этом вопросе, и этот ответ будет слишком длинным, но в основном это простые сценарии оболочки, запускаемые событиями ОС. Вы можете прочитать больше об этом здесь
Докер :
Просто запустите ваш сервер в Docker-контейнере с
-d
опцией и, вуаля , у вас есть демонизированный сервер node.js!Вот пример Dockerfile (из официального руководства node.js ):
Затем создайте свой образ и запустите свой контейнер:
Надеюсь, это поможет кому-нибудь приземлиться на этой странице. Всегда используйте подходящий инструмент для работы. Это избавит вас от многих головных болей и лишних часов!
источник
tail -f
используя файл журнала, который генерирует pm2.screen
решение, которое многие люди находят, а работа - это обходной путь. Есть много способов достижения конкретной задачи. Я полагаю, что это случается, что (рассмотрите конкретный вопрос), это, оказывается, достигает определенной задачиrun as background and never die
превосходного для многих. Он также имеет дополнительный бонус, позволяющий пользователю вернуться в него, чтобы вновь взаимодействовать и вносить изменения, если он хочет. Ключ это компонентыbackground
и естьnever die
. Все решения имеют определенные бонусы.nohup
Это решение. Он встроен в Linux и предназначен для этого. Это одна строка, она чистая и работает как задумано, всегда, независимо от обновлений. Люди действительно должны стараться избегать использования сторонних инструментов для базовых сценариев использования, таких как этот. Пример докера (например) намного более многословен и ресурсоемок, чем одна простая команда в ответе с верхним голосом. Люблю докер, но не за это.nohup
решение не удовлетворяет требованию «никогда не умирать». Если вы не напишете очень хитрыйtrap
или хакерский бесконечный цикл, я не пойму, как сохранить демонизированный процесс без использования инструментов, специально написанных для этой цели (или сценария инициализации, написанного вами, конечно).другое решение отречься от работы
источник
nohup
позволит программе продолжаться даже после смерти терминала. У меня действительно были ситуации, когдаnohup
предотвращает корректное завершение сеанса SSH, поэтому вы должны также перенаправить ввод:В зависимости от того, как
nohup
настроено, вам также может понадобиться перенаправить стандартный вывод и стандартную ошибку в файлы.источник
У меня есть эта функция в моем rc-файле оболочки, основанная на ответе @ Yoichi:
Вы можете использовать это так:
источник
Nohup и screen предлагают отличные световые решения для запуска Node.js в фоновом режиме. Диспетчер процессов Node.js ( PM2 ) - удобный инструмент для развертывания. Установите его с помощью npm в вашей системе:
npm install pm2 -g
запустить приложение Node.js в качестве демона:
pm2 start app.js
При желании вы можете связать его с Keymetrics.io SAAS для мониторинга, разработанной Unitech.
источник
Он удалит команду из списка активных задач и отправит команду в фоновый режим.
источник
Вы читали о команде nohup ?
источник
Чтобы запустить команду как системную службу в Debian с помощью sysv init:
Скопируйте скелетный скрипт и адаптируйте его под свои нужды, вероятно, все, что вам нужно сделать, это установить некоторые переменные. Ваш скрипт будет наследовать точные значения по умолчанию
/lib/init/init-d-script
, если что-то не соответствует вашим потребностям - переопределите это в вашем скрипте. Если что-то пойдет не так, вы можете увидеть детали в источнике/lib/init/init-d-script
. Обязательные перемены естьDAEMON
иNAME
. Скрипт будет использоватьstart-stop-daemon
для запуска вашей команды,START_ARGS
вы можете определить дополнительные параметрыstart-stop-daemon
для использования.Вот как я запускаю некоторые вещи на Python для моей вики-сайта Викимедиа:
Помимо установки vars мне пришлось переопределить,
do_stop_cmd
потому что Python заменяет исполняемый файл, поэтому служба не остановилась должным образом.источник
Помимо крутых решений выше, я бы упомянул также о средствах supervisord и monit, которые позволяют запускать процесс, отслеживать его наличие и запускать, если он умер. С помощью 'monit' вы также можете запускать некоторые активные проверки, такие как проверка, отвечает ли процесс на запрос http
источник
Для Ubuntu я использую это:
С уважением
источник
Попробуйте это для простого решения
cmd & выход
источник