脚本内容:
APP_NAME="testApp"
BASE_DIR="/project/addr"
JAR_FILE="$BASE_DIR/${APP_NAME}.jar"
LOG_DIR="$BASE_DIR/logs"
INFO_LOG="$LOG_DIR/info.log"
ERROR_LOG="$LOG_DIR/error.log"
JDK_PATH="$BASE_DIR/jdk1.8.0_211"
# JVM 参数设置
JVM_OPTIONS="-server -Xms512m -Xmx1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -Djava.awt.headless=true -Duser.timezone=GMT+08 -Xloggc:$LOG_DIR/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_DIR/heapdump.hprof"
# 使用绝对路径来指定jdk下的java命令
JAVA_CMD="$JDK_PATH/bin/java"
# PID 文件路径
PID_FILE="$BASE_DIR/${APP_NAME}.pid"
# 检查日志目录是否存在,不存在则创建
if [ ! -d "$LOG_DIR" ]; then
mkdir -p "$LOG_DIR"
fi
# 启动程序
start() {
if [ -f "$PID_FILE" ]; then
echo "服务已经在运行中,PID为$(cat $PID_FILE)"
else
nohup $JAVA_CMD $JVM_OPTIONS -jar $JAR_FILE >$INFO_LOG 2>$ERROR_LOG &
echo $! > $PID_FILE
echo "服务启动成功,PID为$(cat $PID_FILE)"
fi
}
# 停止程序
stop() {
if [ -f "$PID_FILE" ]; then
kill $(cat $PID_FILE)
rm -f $PID_FILE
echo "服务已停止"
else
echo "服务未运行"
fi
}
# 查看服务状态
status() {
if [ -f "$PID_FILE" ]; then
echo "服务正在运行,PID为$(cat $PID_FILE)"
else
echo "服务未运行"
fi
}
# 重启程序
restart() {
stop
sleep 3
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit 0
授予脚本可执行权限:
chmod u+x run.sh
执行方法:
启动服务:./run.sh start
停止服务:./run.sh stop
重启服务:./run.sh restart
查看状态:./run.sh status
会生成info error等日志,在logs目录中