【问题标题】:launching multiple nodemon with bashscript使用 bash 脚本启动多个 nodemon
【发布时间】:2018-01-29 20:49:28
【问题描述】:

我们在微服务架构上。我想使用一个 bash 脚本切换到我们服务的不同语言环境。我是 bash 的新手,这是我的菜鸟尝试。

#!/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 才会同时重新启动所有服务器。

非常感谢您的耐心和建议。

【问题讨论】:

  • 你能提供更多细节吗?
  • 好的,所以我们的 grunt 脚本最初使用启动 grunt 脚本时提供的环境变量启动所有服务器和服务。要更改语言环境,您必须使用新的环境变量重新启动整个 grunt 过程,这非常耗时。这就是这个脚本发挥作用的地方。它只停止微服务并使用新变量重新启动它们。不到 5 秒。我想添加的唯一不错的功能是 Nodemon 分别与每个目录一起工作。 atm nodemon 仅查看主进程目录中的更改并重新启动所有服务器

标签: javascript node.js bash shell nodemon


【解决方案1】:

您是否愿意为此使用 bash?您是否考虑过 gulp 或其他基于 JS 的构建工具?

有些库允许您编排多个流程、监视更改等,而无需重新发明轮子。

【讨论】:

  • 我们咕哝着。但是在 grunt 上重新启动脚本需要太长时间,因为重新启动 grunt 脚本的过程很长。需要运行测试,检查远程仓库是否有更新的代码。 Linting,整个过程大约需要 1 到 2 分钟,当您必须在语言环境之间移动时,这会占用开发时间。
  • 我问是因为,如果多个服务器都从自己的代码运行,我并不清楚为什么首先要重新启动多个服务器。
猜你喜欢
  • 2016-02-26
  • 2018-12-28
  • 2016-08-11
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
相关资源
最近更新 更多