- A+
所属分类:Linux
Linux上的启动、停止应用程序的shell脚本编写
在日常运维工作中,都会有启动、停止、查看应用状态的需求,我们在生产环境中编写好自动化启停应用的shell脚本,一方面,可以为了提高工作效率,另一方面,降低运维工作的成本和失败率。
总结一套启停应用服务的通用shell脚本
#!/bin/bash
#导入jdk环境变量
export JAVA_HOME=/etc/alternatives/jre_1.8.0_openjdk
ulimit -c unlimited
#应用目录
APP_HOME=/home/admin/yuelu-book
#应用名称
APP_NAME=yuelu-book
#Java启动时JVM参数设置
JAVA_OPTS="-server"
JAVA_OPTS="${JAVA_OPTS} -Xms4g -Xmx4g"
JAVA_OPTS="${JAVA_OPTS} -Xmn2g"
JAVA_OPTS="${JAVA_OPTS} -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m"
JAVA_OPTS="${JAVA_OPTS} -XX:MaxDirectMemorySize=1g"
JAVA_OPTS="${JAVA_OPTS} -XX:SurvivorRatio=10"
JAVA_OPTS="${JAVA_OPTS} -XX:+UseConcMarkSweepGC -XX:CMSMaxAbortablePrecleanTime=5000"
JAVA_OPTS="${JAVA_OPTS} -XX:+CMSClassUnloadingEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly"
JAVA_OPTS="${JAVA_OPTS} -XX:+ExplicitGCInvokesConcurrent -Dsun.rmi.dgc.server.gcInterval=2592000000 -Dsun.rmi.dgc.client.gcInterval=2592000000"
JAVA_OPTS="${JAVA_OPTS} -XX:ParallelGCThreads=4"
JAVA_OPTS="${JAVA_OPTS} -Xloggc:${APP_HOME}/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
JAVA_OPTS="${JAVA_OPTS} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${APP_HOME}/java.hprof"
JAVA_OPTS="${JAVA_OPTS} -Djava.awt.headless=true"
JAVA_OPTS="${JAVA_OPTS} -Dsun.net.client.defaultConnectTimeout=10000"
JAVA_OPTS="${JAVA_OPTS} -Dsun.net.client.defaultReadTimeout=30000"
JAVA_OPTS="${JAVA_OPTS} -Dfile.encoding=UTF-8"
JAVA_OPTS="${JAVA_OPTS} -Dproject.name=$APP_NAME"
#导入JAVA参数设置
export JAVA_OPTS
#使用说明,用来提示输入参数,如果输出其他不相关的命令,会提示正确命令
usage() {
#使用具体命令 例如 sh core.sh start 启动应用程序
echo "Usage: sh core.sh [start|stop|restart|status]"
exit 1
}
#检查程序是否在运行
is_exist(){
#查看具体应用的进程号,并且进行记录 grep -v grep 过滤grep
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
#调用检查应用方法
is_exist
if [ $? -eq 0 ]; then
echo "${APP_NAME} is already running. pid=${pid}"
else
#启动Java应用,如果需要后台运行则使用 nohup
$JAVA_HOME/bin/java -jar $JAVA_OPTS $APP_HOME/target/$APP_NAME.jar &
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
#杀死进程
kill -9 $pid
echo "${APP_NAME} is stop"
else
echo "${APP_NAME} is not running"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is not running."
fi
}
#重启
restart(){
stop
sleep 5
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
- 我的微信
- 加好友一起交流!
-
- 微信公众号
- 关注公众号获取分享资源!
-