原文: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 接着,標准錯誤輸出重定向等同於 標准輸出,因為之前標准輸出已經重定向到了空設備文件,所以標准錯誤輸出也重定向到空設備文件。