2016-12-14 78 views
0

我是shell脚本的初学者。在shell脚本中运行两个节点进程

我有一个节点js程序和一个使用mongoDB的API。所以API使用快递,并链接到我的路线和模式 - 我所要做的,以启动API服务器运行node app.js

但是,我也有我的主要程序,其中调查特定的网址,用户添加通过数据库,然后将从轮询请求返回的数据保存到数据库中。这发生在每个“x”秒,因此我总是在轮询发生时打开mongo连接,并在它结束后立即关闭它。所以为了运行这个程序,我需要运行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应用。

任何帮助将不胜感激,因为我只是想从谷歌帮助中弄清楚这一点!

回答

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 

最佳, 弗兰克

+0

但API永不完成? – deeveeABC

+0

两者都会在后台运行......因此,只要没有意外的事情发生,并且两个进程都会死亡,您将永远等待。如果你想杀死其中一个进程,你可以结合使用'kill'命令和方形回车中的'PID',并跳过'wait'语句。 –

0

服务管理是棘手的,也有专门为它开发的工具。最好不要在bash中重新发明轮子。使用foreverpm2来管理服务。

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

放在你的脚本

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

您还可以在你的package.json

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

然后npm startscripts节将启动您的应用程序,这些命令(或脚本) 。 stoprestart也是标准。

如果您在服务器上执行此操作,请使用本机服务管理器来管理每项服务。如果你在linux上,这很可能是systemd