陕西省交通建设集团西长分公司网站,做水产的都用什么网站,海口网,农业局网站建设方案1. 业务场景
用于单机生产环境#xff0c;防止服务器断电或者强制重启导致的服务下线。
2. 实现方案
对于无状态服务#xff0c;可容器部署设置 restart: always#xff0c;systemctl eable docker对于有状态服务#xff0c;可编写自启脚本#xff0c;如下
① 编写执行…1. 业务场景
用于单机生产环境防止服务器断电或者强制重启导致的服务下线。
2. 实现方案
对于无状态服务可容器部署设置 restart: alwayssystemctl eable docker对于有状态服务可编写自启脚本如下
① 编写执行脚本
#!/bin/bash
APP_NAMEsaveName
PROG_NAME$0
ACTION$1
APP_START_TIMEOUT20 # 等待应用启动的时间
APP_PORT81 # 应用端口
HEALTH_CHECK_URLhttp://127.0.0.1:${APP_PORT} # 应用健康检查URL
APP_HOME$(pwd) # 从package.tgz中解压出来的jar包放到这个目录下
HEALTH_CHECK_FILE_DIR${APP_HOME}/status # 脚本会在这个目录下生成nginx-status文件
JAR_NAME${APP_HOME}/app.jar # jar包的名字
JAVA_OUT/dev/null #应用的启动日志
JAVA_HOME${APP_HOME}/jdk-11.0.16
# 创建出相关目录
mkdir -p ${HEALTH_CHECK_FILE_DIR}
#mkdir -p ${APP_HOME}
usage() {echo Usage: $PROG_NAME {start|stop|restart|init|jdk_install}exit 2
}
jdk_install() {tar zxvf ${APP_HOME}/jdk-11.0.16_linux-x64_bin.tar.gztee -a /etc/profile EOFexport JAVA_HOME${APP_HOME}/jdk-11.0.16export PATH${APP_HOME}/jdk-11.0.16/bin:\$PATHexport CLASS_PATH${APP_HOME}/jdk-11.0.16/lib
EOFecho 如没有jdk日志请手动执行source /etc/profile java -versionsource /etc/profilejava -version
}
health_check() {exptime0echo checking ${HEALTH_CHECK_URL}while truedostatus_code/usr/bin/curl -L -o /dev/null --connect-timeout 5 -s -w %{http_code} ${HEALTH_CHECK_URL}if [ $? ! 0 ]; thenecho -n -e \rapplication not startedelseecho code is $status_codeif [ $status_code 401 ];thenbreakfifisleep 5((exptime))echo -e \rWait app to pass health check: $exptime...if [ $exptime -gt ${APP_START_TIMEOUT} ]; thenecho app start failedexit 1fidoneecho check ${HEALTH_CHECK_URL} success
}
start_application() {echo starting java processecho nohup java -jar ${JAR_NAME} --spring.profiles.active${env} ${JAVA_OUT} 21 nohup java -jar ${JAR_NAME} --spring.profiles.active${env} ${JAVA_OUT} 21 echo started java process
}stop_application() {checkjavapidps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v deploy.sh| awk {print$2}if [[ ! $checkjavapid ]];thenecho -e \rno java processreturnfiecho stop java processtimes60for e in $(seq 60)dosleep 1COSTTIME$(($times - $e ))checkjavapidps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v deploy.sh| awk {print$2}if [[ $checkjavapid ]];thenkill -9 $checkjavapidecho -e \r -- stopping java lasts expr $COSTTIME seconds.elseecho -e \rjava process has exitedbreak;fidoneecho
}
start() {start_applicationhealth_check
}
stop() {stop_application
}
case $ACTION instart)start;;stop)stop;;restart)stopstart;;jdk_install)jdk_install;;*)usage;;
esac
① 编写自启脚本
#!/bin/sh
# chkconfig: 2345 20 20
# clear file
basebaseArg
serveStart() {echo 正在启动Solrcd baseArg/servesh baseArg/serve/deploy.sh start
}
serveStart② 注册自启脚本至linux开启自动调用目录
ACTION$1
usage() {echo Usage: $PROG_NAME {init|stopAll}exit 2
}
stopAll(){
checkjavapidps -ef | grep $serveName| awk {print$2}
kill -9 $checkjavapid
}
init(){
base$(pwd)
sed -i s|baseArg|${base}|g $base/autoSave.sh
chmod 777 $base/autoSave.sh
rm -rf /etc/init.d/autoSave.sh
cp -rf $base/autoSave.sh /etc/init.d/autoSave.sh
chmod 777 /etc/init.d/autoSave.sh
chkconfig --add autoSave.sh
chkconfig autoSave.sh on
chkconfig --list
}
case $ACTION ininit)init;;stopAll)stopAll;;*)usage;;
esac