2016-12-14 80 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