原文:http://blog.csdn.net/qq_16974305/article/details/53025593
开发项目采用Dubbo分布式开发基本上都是Linux服务器部署项目,多个项目模块部署需要按照规范进行部署,方便项目管理以及迁移。
项目模块部署规范:
i1. 建立项目部署目录文件夹。通常以项目名为根节点。
i2. 二级目录为项目类型名。例如:app、service、timer、web。
i3. 三级目录为子模块项目名。
自定义Dubbo服务维护的Shell脚本。
-
脚本命名规范:
/root/edu/service/xxx/service-xxx.sh
例如:
/root/edu/service/user/service-user.sh -
效果:
# cd /root/edu/service/user # ./service-user.sh start # ./service-user.sh stop # ./service-user.sh restart
- 1
- 2
- 3
- 4
以下是自定脚本代码:
#!/bin/sh ## java env export JAVA_HOME=/root/jdk1.7.0_79 export JRE_HOME=$JAVA_HOME/jre ## service name APP_NAME=user SERVICE_DIR=/root/edu/service/$APP_NAME SERVICE_NAME=edu-service-$APP_NAME JAR_NAME=$SERVICE_NAME\.jar PID=$SERVICE_NAME\.pid cd $SERVICE_DIR case "$1" in start) nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME >/dev/null 2>&1 & echo $! > $SERVICE_DIR/$PID echo "=== start $SERVICE_NAME" ;; stop) kill `cat $SERVICE_DIR/$PID` rm -rf $SERVICE_DIR/$PID echo "=== stop $SERVICE_NAME" sleep 5 ## ## edu-service-aa.jar ## edu-service-aa-bb.jar P_ID=`ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk '{print $2}'` if [ "$P_ID" == "" ]; then echo "=== $SERVICE_NAME process not exists or stop success" else echo "=== $SERVICE_NAME process pid is:$P_ID" echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID" kill -9 $P_ID fi ;; restart) $0 stop sleep 2 $0 start echo "=== restart $SERVICE_NAME" ;; *) ## restart $0 stop sleep 2 $0 start ;; esac exit 0
注:使用这个批处理文件只需要将修改定义变量路径修改正确既可以使用。
注意:
shell中可能经常能看到:>/dev/null 2>&1
命令的结果可以通过%>的形式来定义输出
/dev/null 代表空设备文件
> 代表重定向到哪里,例如:echo "123" > /home/123.txt
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
那么本文标题的语句:
1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 接着,标准错误输出重定向等同于 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。