通过读取properties文件test.properties,获取相应环境的运行文件路径(需要部分内容如下):
....
vcs.dev1.us.base.rootdirectory=/cvadevd/dev1/vcs/instances/base
vcs.dev1.us.stress.rootdirectory=/cvadevd/dev1/vcs/instances/stress
vcs.dev2.us.base.rootdirectory=/cvadevd/dev2/vcs/instances/base
vcs.dev2.us.stress.rootdirectory=/cvadevd/dev2/vcs/instances/stress
...
可执行文件为test.sh
执行文件的命令为./test.sh test.properties dev1。注这里用./执行是因为公司服务器将执行命令重定义了,下面有用“./”运行的同此。
#获取test.sh文件所在的路径,不包括test.sh,这里没用到
#BIN=`dirname "${BASH_SOURCE[0]}"`
#BIN=`cd "$BIN";pwd`
#echo ${BIN}
#filename为test.properties, ENV为dev1
filename=$1
ENV=$2
echo ${filename}
echo ${ENV}
#获取环境在dev1下的所有的路径,以空格隔开
paths=`awk "/vcs.${ENV}.*.rootdirectory/{print $3}" $filename`
#循环以空格分割的path,默认是空格隔开
for path in $paths;
do
//切割vcs.dev1.us.base.rootdirectory=/cvadevd/dev1/vcs/instances/base,获取等号后面的路径
dir=${path##*=}
#判断路径是否存在
if [ ! -d "/home${dir}" ];then
echo /home${dir} is not exist!
else
#如果路径存在,判断路径下的需要执行的进程的个数,如果为0表示不存在,需要启动该#进程,如果不为零表示已经存在,则不需要启动
#启动进程的原始命令为nohup ./via.py dev1 base 2>&1 >/dev/null & (这里参数dev1 base没有任何意义,只是所有的环境下进程名都是via.py, 所以用来表示不同的进程)
#${dir##*/}获取配置文件中最后一个/之后的文本
count=`ps -ef | grep "${ENV} ${dir##*/}" | grep -v "grep" | wc -l`
  if [ $count -eq 0 ];then
#如果进程不存在,则转到相应目录下启动
  cd /home${dir}/
  nohup ./via.py ${ENV} ${dir##*/} 2>&1 >/dev/null &
  else
  echo the process:${ENV} ${dir##*/} has existed!
  fi
fi
done