141 lines
3.2 KiB
Bash
141 lines
3.2 KiB
Bash
#!/bin/bash
|
||
|
||
# 牛只数据管理后端启动脚本
|
||
# 使用方法: ./start.sh [start|stop|restart]
|
||
|
||
APP_NAME="cattletends"
|
||
JAR_NAME="cattletends-1.0.0.jar"
|
||
APP_PORT=12240
|
||
JAVA_OPTS="-Xms512m -Xmx1024m"
|
||
SPRING_PROFILE="prod"
|
||
LOG_FILE="log.out"
|
||
PID_FILE="pid.${APP_NAME}"
|
||
|
||
# 获取脚本所在目录
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
||
|
||
# 检查jar文件是否存在
|
||
if [ ! -f "$JAR_PATH" ]; then
|
||
echo "错误: 找不到jar文件: $JAR_PATH"
|
||
echo "请先执行 mvn clean package 打包项目"
|
||
exit 1
|
||
fi
|
||
|
||
# 停止应用
|
||
function stopApp() {
|
||
echo "正在停止应用: $APP_NAME"
|
||
|
||
# 查找进程
|
||
PID=$(ps -ef | grep java | grep "$JAR_NAME" | grep -v grep | awk '{print $2}')
|
||
|
||
if [ -n "$PID" ]; then
|
||
echo "找到进程 PID: $PID"
|
||
kill -15 $PID
|
||
|
||
# 等待进程结束,最多等待10秒
|
||
for i in {1..10}; do
|
||
if ! ps -p $PID > /dev/null 2>&1; then
|
||
echo "应用已停止"
|
||
rm -f $PID_FILE
|
||
return 0
|
||
fi
|
||
sleep 1
|
||
done
|
||
|
||
# 如果还在运行,强制杀死
|
||
if ps -p $PID > /dev/null 2>&1; then
|
||
echo "强制停止进程..."
|
||
kill -9 $PID
|
||
rm -f $PID_FILE
|
||
fi
|
||
else
|
||
echo "应用未运行"
|
||
rm -f $PID_FILE
|
||
fi
|
||
}
|
||
|
||
# 启动应用
|
||
function startApp() {
|
||
echo "正在启动应用: $APP_NAME"
|
||
|
||
# 检查是否已经运行
|
||
PID=$(ps -ef | grep java | grep "$JAR_NAME" | grep -v grep | awk '{print $2}')
|
||
if [ -n "$PID" ]; then
|
||
echo "应用已经在运行中,PID: $PID"
|
||
return 1
|
||
fi
|
||
|
||
# 启动应用
|
||
nohup java $JAVA_OPTS \
|
||
-Dspring.profiles.active=$SPRING_PROFILE \
|
||
-Dserver.port=$APP_PORT \
|
||
-jar "$JAR_PATH" > "$LOG_FILE" 2>&1 &
|
||
|
||
# 等待启动
|
||
sleep 3s
|
||
|
||
# 检查进程
|
||
PID=$(ps -ef | grep java | grep "$JAR_NAME" | grep -v grep | awk '{print $2}')
|
||
|
||
if [ -n "$PID" ]; then
|
||
echo "应用启动成功,PID: $PID"
|
||
echo $PID > $PID_FILE
|
||
echo "日志文件: $LOG_FILE"
|
||
echo "查看日志: tail -f $LOG_FILE"
|
||
return 0
|
||
else
|
||
echo "应用启动失败,请查看日志: $LOG_FILE"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# 重启应用
|
||
function restartApp() {
|
||
echo "========== 重启应用: $APP_NAME =========="
|
||
stopApp
|
||
sleep 2s
|
||
startApp
|
||
}
|
||
|
||
# 查看状态
|
||
function statusApp() {
|
||
PID=$(ps -ef | grep java | grep "$JAR_NAME" | grep -v grep | awk '{print $2}')
|
||
if [ -n "$PID" ]; then
|
||
echo "应用运行中,PID: $PID"
|
||
echo "端口: $APP_PORT"
|
||
echo "日志: $LOG_FILE"
|
||
else
|
||
echo "应用未运行"
|
||
fi
|
||
}
|
||
|
||
# 主逻辑
|
||
case "$1" in
|
||
start)
|
||
startApp
|
||
;;
|
||
stop)
|
||
stopApp
|
||
;;
|
||
restart)
|
||
restartApp
|
||
;;
|
||
status)
|
||
statusApp
|
||
;;
|
||
*)
|
||
echo "使用方法: $0 {start|stop|restart|status}"
|
||
echo ""
|
||
echo "参数说明:"
|
||
echo " start - 启动应用"
|
||
echo " stop - 停止应用"
|
||
echo " restart - 重启应用"
|
||
echo " status - 查看应用状态"
|
||
exit 1
|
||
;;
|
||
esac
|
||
|
||
exit $?
|
||
|