Appearance
Linux 下通用 jar 启动脚本
About 603 wordsAbout 2 min
2022-06-02
一个通用 jar 包管理脚本,可以启动、停止和重启你的项目。最好是根据自己项目的实际情况做出相应的修改。
#!/bin/zsh
# 使用命令
USAGE="Usage: startup.sh {start|stop|restart}"
# 参数个数
exec_param_count=$#
# 如果不是 stop 命令,那么就是需要启动启动服务,此时参数不能少于3个,如果小于3,则提示使用命令
if [ $1 != "stop" -a $exec_param_count -lt 1 ]; then
echo $USAGE
exit
fi
cd $(dirname $0)
WORKSPACE=$(pwd)
# 获取 jar 文件
JAR_NAME=$(ls $WORKSPACE | grep .jar$ | awk '{print "'$LIB_DIR'/"$0}')
FULL_JAR_NAME="$WORKSPACE$JAR_NAME"
# 启动命令
start() {
# 根据配置文件找出 pid
echo "WORKSPACE=$WORKSPACE"
PIDS=$(ps -ef | grep java | grep -v grep | grep "$WORKSPACE" | awk '{print $2}')
if [ -n "$PIDS" ]; then
echo "启动失败: 该服务已经在运行中!PID: $PIDS"
exit 1
fi
# 启动,可以根据需求增加或改变调优参数
echo "准备启动$FULL_JAR_NAME"
echo "nohup java -Xmx256m -Xms256m -Xms128m -jar $FULL_JAR_NAME -Dspring.config.location=$WORKSPACE/application.yml >/dev/null 2>&1 &"
nohup java -Xmx256m -Xms256m -Xmn256m -jar "$FULL_JAR_NAME" -Dspring.config.location="$WORKSPACE/application.yml" >/dev/null 2>&1 &
# 等待启动完成
COUNT=0
WAIT_TIME=0
echo "...................................."
while [ $COUNT -lt 1 ]; do
sleep 1
WAIT_TIME=$(expr $WAIT_TIME + 1)
# 找出 java 进程|过滤 grep|根据全路径文件名找出唯一 pid |统计数量
COUNT=$(ps -ef | grep java | grep -v grep | grep "$FULL_JAR_NAME" | awk '{print $2}' | wc -l)
# 大于0 说明进程已经启动成功了
if [ $COUNT -gt 0 ]; then
# 启动成功
break
fi
# 大于 120s 超时
if [ $WAIT_TIME -gt 120 ]; then
echo "启动超时"
exit 1
fi
done
echo "...................................."
PIDS=$(ps -ef | grep java | grep -v grep | grep "$FULL_JAR_NAME" | awk '{print $2}')
echo "服务启动成功,PID: $PIDS"
}
stop() {
# 根据配置文件找出 pid
echo "WORKSPACE=$WORKSPACE"
PIDS=$(ps -ef | grep java | grep -v grep | grep "$FULL_JAR_NAME" | awk '{print $2}')
if [ -z "$PIDS" ]; then
echo "该服务尚未运行!"
exit
fi
kill $PIDS
echo "正在服务停止,PID:$PIDS"
# 等待停止
COUNT=$(ps -ef | grep java | grep -v grep | grep "$FULL_JAR_NAME" | awk '{print $2}' | wc -l)
WAIT_TIME=0
echo "...................................."
# 一直等待进场终止
while [ $COUNT -gt 0 ]; do
sleep 1
WAIT_TIME=$(expr $WAIT_TIME + 1)
COUNT=$(ps -ef | grep java | grep -v grep | grep "$FULL_JAR_NAME" | awk '{print $2}' | wc -l)
if [ $WAIT_TIME -gt 120 ]; then
echo "停止超时,强制停止进程"
kill -9 PIDS
exit 1
fi
done
echo "服务已经停止"
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
echo "服务重启中"
stop
sleep 1
start
;;
*)
echo $USAGE
;;
esac
exit 0
使用说明:
# 目录结构如下,如果目录结构不一样可以更改脚本
$ ls
springboot.jar application.yml server.sh
# 启动
$ sh server.sh start
# 停止
$ sh server.sh stop
# 重启
$ sh server.sh restart