2017-08-21 49 views
0

我們在微服務架構上。我想用一個bash腳本切換到我們服務的不同區域。我對bash很陌生,這是我的不客氣的嘗試。用bashscript啓動多個nodemon

#!/bin/bash 
#RUN THIS COMMAND BEFORE FIRST USE - sudo chmod u+x locale-changer.sh 

#DIRECTIONS 
#THIS SCRIPT ASSUMES YOU HAVE ALREADY STARTED NPM RUN LOCAL OR REGION=AA DEFAULT_MARKET=PT-BR NODE_ENV=local-qat2 grunt watch 
#AFTER STARTING YOUR GRUNT SCRIPT OPEN A NEW TERMINAL TAB AND TYPE IN APPROPRIATE LOCALE NPM SCRIPT EXAMPLE npm run fc TO LAUNCH FRENCH CANADA LOCALE 
#PLEASE SEE package.json, FOR LOCALE SPECIFIC SCRIPTS. 

# NODEMON=nodemon 

# if ! [ -x "$(command -v nodemon)" ]; then 
# echo 'nodemon not installed using node' 
# NODEMON=node 
# fi 

pid=$(lsof -i tcp:3000 -t); kill -TERM $pid || kill -KILL $pid 
pid=$(lsof -i tcp:3001 -t); kill -TERM $pid || kill -KILL $pid 
pid=$(lsof -i tcp:3002 -t); kill -TERM $pid || kill -KILL $pid 
pid=$(lsof -i tcp:3003 -t); kill -TERM $pid || kill -KILL $pid 
pid=$(lsof -i tcp:3004 -t); kill -TERM $pid || kill -KILL $pid 
pid=$(lsof -i tcp:3005 -t); kill -TERM $pid || kill -KILL $pid 
pid=$(lsof -i tcp:3006 -t); kill -TERM $pid || kill -KILL $pid 
pid=$(lsof -i tcp:3008 -t); kill -TERM $pid || kill -KILL $pid 

REGION=$1 
DEFAULT_MARKET=$2 
NODE_ENV=$3 

echo "Starting services with REGION=$REGION DEFAULT_MARKET=$DEFAULT_MARKET NODE_ENV=$NODE_ENV" 
current_dir=$PWD;cd /path/to/your/command/dir;special command ARGS;cd $current_dir; 
PORT=3003 REGION=$REGION DEFAULT_MARKET=$DEFAULT_MARKET NODE_ENV=$NODE_ENV node ../core-service1/app/server/server.js & 
PORT=3002 REGION=$REGION DEFAULT_MARKET=$DEFAULT_MARKET NODE_ENV=$NODE_ENV node ../code-service2/app/server/server.js & 
PORT=3000 REGION=$REGION DEFAULT_MARKET=$DEFAULT_MARKET NODE_ENV=$NODE_ENV nodemon ../router/app/server/server.js & 
PORT=3001 REGION=$REGION DEFAULT_MARKET=$DEFAULT_MARKET NODE_ENV=$NODE_ENV node ./app/server/server.js & 
PORT=3004 REGION=$REGION DEFAULT_MARKET=$DEFAULT_MARKET NODE_ENV=$NODE_ENV node ../core-service3/app/server/server.js & 
PORT=3005 REGION=$REGION DEFAULT_MARKET=$DEFAULT_MARKET NODE_ENV=$NODE_ENV node ../core-service4/app/server/server.js & 
PORT=3008 REGION=$REGION DEFAULT_MARKET=$DEFAULT_MARKET NODE_ENV=$NODE_ENV nodemon ../core-service5/app/server/server.js 

trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT 

問題是我希望nodemon只能重新啓動它檢測到更改的服務器。現在的情況如果我在其中一個服務器目錄中更改某些內容,那麼nodemon將不會執行任何更改。只有當我在最初啓動進程的目錄中更改某項內容時,nodemon纔會同時重新啓動所有服務器。

你的耐心和建議是非常感謝。

+0

你能提供更多細節嗎? –

+0

好吧,我們的grunt腳本最初使用啓動grunt腳本時提供的env變量啓動所有服務器和服務。要更改語言環境,必須使用新的env變量重新啓動整個grunt進程,這非常耗時。這就是腳本進場的地方。它只停止微服務並用新變量重新啓動它們。需要不到5秒。我想補充的唯一不錯的功能是Nodemon分別與每個目錄一起工作。 Atm nodemon僅查看主進程目錄中的更改,然後重新啓動所有服務器 –

回答

0

你是否使用bash來連接它?你有沒有考慮過一些基於JS的構建工具?

有一些庫允許您編排多個進程,監視更改等,而無需在此重新發明輪子。

+0

我們很咕嚕。但是重新啓動grunt上的腳本需要很長的時間,因爲重新啓動grunt腳本需要很長的時間。測試需要運行,遠程倉庫將被檢查更新的代碼。 Linting,整個過程需要1 - 2分鐘,當你必須在地區之間移動時,這會消耗開發時間。 –

+0

你對不同地區有不同的代碼? – metahamza

+0

我問,因爲我不清楚爲什麼多個服務器首先重新啓動,如果他們都從他們自己的代碼運行。 – metahamza