2016-12-14 2 views
0

Я являюсь новичком в сценариях оболочки.Выполнение процессов с двумя узлами внутри сценария оболочки

У меня есть узловая js-программа и API, который использует mongoDB. Таким образом, API использует экспресс и связан с моими маршрутами и схемами - все, что мне нужно сделать, чтобы запустить сервер API, запущен node app.js

Однако у меня также есть моя основная программа, которая опросает определенные URL-адреса, которые пользователь добавляет через базу данных, а затем сохраняет данные, которые возвращаются из запроса опроса в базе данных. Это происходит каждые «х» секунд, поэтому я всегда открываю соединение монго, когда происходит опрос, и закрываю его, как только он его завершает. Поэтому, чтобы запустить эту программу, мне нужно запустить node main.js

app.js Кажется, просто открывается соединение mongo один раз, когда программа запущена.

Так что мой вопрос: могу ли я связать их как-то, написав сценарий bash, чтобы я мог начать оба процесса вместе и завершить их, когда это необходимо?

Я попытался сделать это:

#!/usr/bin/bash 
# declare STRING variable 
STRING="Starting node processes" 
#print variable on a screen 
echo $STRING 

node misrepo/app.js 
node misrepo/main.js 

Однако это начинается только app.js, и не работаю мои main.js приложения.

Любая помощь будет оценена, поскольку я просто пытаюсь понять это из помощи googles!

ответ

0

Чтобы запустить две программы параллельно вы можете сделать следующее:

#!/usr/bin/bash 
# declare STRING variable 
STRING="Starting node processes" 
#print variable on a screen 
echo $STRING 

node misrepo/app.js & node misrepo/main.js 

Это запустит узел с misrepo/app.js и сразу же еще один экземпляр узла с misrepo/main.js. В вашем примере блоки сценария до исполнения node misrepo/app.js отделки и только затем начинает node misrepo/main.js

1

Хороший ответ Маркус,

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

Лучше начать оба процесса в фоновом режиме (вызванные &) и дождаться завершения обоих процессов. В противном случае кажется, что оба процесса завершены, пока вы только ждете вторую команду. Это может вызвать проблемы при обработке вывода обеих команд.

#!/usr/bin/bash 
# declare STRING variable 
STRING="Starting node processes" 
#print variable on a screen 
echo $STRING 

node misrepo/app.js& 
node misrepo/main.js& 

# wait until both background processes finish 
wait 

Best, Frank

+0

Но API никогда не заканчивается? – deeveeABC

+0

Оба будут работать в фоновом режиме ... Поэтому, пока ничего неожиданного не происходит, и оба процесса умирают, вы будете ждать вечно. В случае, если вы хотите убить один из процессов, вы можете использовать команду 'kill' в сочетании с' PID', возвращаемым в квадратные скобки, и пропустить оператор 'wait'. –

0

Управление услугами является сложным и есть инструменты, созданные специально для него. Лучше всего, если вы не изобретете колесо в bash.

Используйте forever или pm2 для управления услугой.

npm install forever -g 
forever start misrepo/app.js 

Поместите их в сценарии

#!/bin/sh 
forever start misrepo/app.js 
forever start misrepo/main.js 

Вы можете также включить эти команды (или сценарий) в scripts разделе вашего package.json

{ 
    "scripts": { 
    "start": "forever start misrepo/app.js && forever start misrepo/main.js" 
    } 
} 

Тогда npm start начнет свое приложение , stop и restart также являются стандартными.

Если вы делаете это на сервере, а затем используйте собственный сервисный менеджер для управления каждой службой. Вероятно, это будет systemd, если вы на Linux.

Смежные вопросы