编写通用shell脚本启动java项目,适用于多数服务,只需修改服务名即可
文件名:service-user.sh
文件内容:
##shell脚本的头文件必须有
#!/bin/sh
##再次配置java环境变量以防报其他错误
## java env
#jdk安装目录
export JAVA_HOME=/usr/java/jdk1.8.0_144
export JRE_HOME=$JAVA_HOME/jre
## service name
APP_NAME=user
##服务存放的文件夹
SERVICE_DIR=/service/$APP_NAME
##服务名
SERVICE_NAME=edu-service-$APP_NAME
##jar包的名字
JAR_NAME=$SERVICE_NAME\.jar
##生成进程文件
PID=$SERVICE_NAME\.pid
##进入服务存放的文件夹
cd $SERVICE_DIR
##接收一个从linux控制台输入的参数 ./service-user.sh start/stop/restart
case "$1" in
##输入参数为start时启动项目
start)
##nohup守护进程启动项目,即使退出了终端项目仍在运行;/dev/null把日志输入到空即不输出日志到notout.out,因为项目里面已经有log4j日志了
nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME >/dev/null 2>&1 &
echo $! > $SERVICE_DIR/$PID
echo "=== start $SERVICE_NAME"
;;
##输入参数为stop时停止项目
stop)
##杀死进程id即edu-service-user.pid
kill `cat $SERVICE_DIR/$PID`
#删除进程pid的文件
rm -rf $SERVICE_DIR/$PID
echo "=== stop $SERVICE_NAME"
#等待5s
sleep 5
##
## edu-service-aa.jar
## edu-service-aa-bb.jar
##获取进程id -w是全匹配,不加-w就是模糊匹配,可能会造成误杀进程
P_ID=`ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk '{print $2}'`
#如果进程id为空就提示进程不存在或者已经停止
if [ "$P_ID" == "" ]; then
echo "=== $SERVICE_NAME process not exists or stop success"
##如果进程id不为空就强杀进程
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时重启项目
restart)
$0 stop
sleep 2
$0 start
echo "=== restart $SERVICE_NAME"
;;
##什么都不输入时重启项目
*)
## restart 先停止再重启可以避免进程冲突,因为这样每次生成的进程id都不一样
$0 stop
sleep 2
$0 start
;;
esac
exit 0