Linux服务器
如果应用运行的目标服务器是Linux环境的,则参考如下脚本示意
应用启动脚本模板
####### 单进程软件包安装脚本模版说明 ######### #1. 此脚本默认在根路径下执行 Linux系统默认为 /root #2. 脚本安装软件执行成功后 默认会删除远程下载的路径 #3. 用户自定义实现 建议在 user_shell 下 #4. 需遵循进程ID的存储约束 软件包进程ID标识需存储到指定路径 ####### error code specification ######### # Please update this documentation if new error code is added. # 1 => install fail # 2 => check health fail # 3 => record process id fail # 4 => user shell fail # 用户部署物名称&软件包名称 由使用方基于页面填写 DEPLOY_NAME="demo" SOFTWARE_NAME="demo-1.0.0-SNAPSHOT.jar" APP_HOME="/etc/aliyun" PROCESS_ID_PATH="${APP_HOME}/main_process_id" user_shell() { #用户自定义安装脚本 START #软件包会自动拉取到实例 “~” 路径下,脚本成功后软件包会自动删除 #用户自行决定是否需要先把软件包转移位置 #此处以jar类型软件包为例,后台进程保持运行 cp ${SOFTWARE_NAME} ${APP_HOME} nohup java -jar ${APP_HOME}/${SOFTWARE_NAME} > /dev/null 2>&1 & #用户自定义安装脚本 END } ##### 禁止修改 ##### 可在脚本开始运行时调用,打印当时的时间戳及PID,同时记录软件包进程ID到指定路径。 job_start() { if [[ -e ${PROCESS_ID_PATH} ]]; then startProcessId=`sed -n /"${DEPLOY_NAME}:${SOFTWARE_NAME}"/,+1p ${PROCESS_ID_PATH} | grep -iv [a-z]` kill -9 ${startProcessId} sed -i /${SOFTWARE_NAME}/,+1d ${PROCESS_ID_PATH} sed -i /${SOFTWARE_NAME}/d ${PROCESS_ID_PATH} echo "old process ${startProcessId} in ${APP_HOME}, killed." fi mkdir -p ${APP_HOME} user_shell if [ $? -ne 0 ]; then exit4 #user shell fail fi # 此处约束禁止删除 pid=$! echo "process start success in ${APP_HOME}, pid: ${pid}." echo "${DEPLOY_NAME}:${SOFTWARE_NAME}" >> "${PROCESS_ID_PATH}" echo "${pid}" >> "${PROCESS_ID_PATH}" if [ $? -ne 0 ]; then exit3 #record process id fail fi } ##### 在此函数中检查服务是否起来,可以是检查进程,curl http地址等方式 check_health() { now=$(date +'%Y-%m-%d %H:%M:%S') #自定义健康检查逻辑 result=`curl http://localhost:7001/checkpreload.htm|grep success` if [[ "$result" -eq "" ]]; then echo "[$now][$$] check_health" else exit2 #check health fail fi } exit1() { echo "exit code 1, install fail" exit 1 } exit2() { echo "exit code 2, check health fail" exit 2 } exit3() { echo "exit code 3, record process id fail" exit 3 } exit4() { echo "exit code 4, user shell fail" exit 4 } exit5() { echo "exit code 5, jdk not effect fail" exit 5 } ##### 如果返回值为0,则认为此执行成功,如果非0,则认为执行失败 main() { job_start check_health } ##### 触发执行 日志由OOS自动记录 main
应用停止脚本模板
##### 可在脚本开始运行时调用,打印当时的时间戳及PID。 PID_FILE_PATH="/etc/aliyun/main_process_id" DEPLOY_NAME="demo" SOFTWARE_HOME="demo-1.0.0-SNAPSHOT.jar" FLAG=0 function job_stop() { for line in `cat ${PID_FILE_PATH}` do if [[ ${FLAG} == 1 ]]; then kill -9 $line FLAG=0 sed -i /${SOFTWARE_HOME}/,+1d ${PID_FILE_PATH} sed -i /${SOFTWARE_HOME}/d ${PID_FILE_PATH} fi if [[ $line == "${DEPLOY_NAME}:${SOFTWARE_HOME}" ]]; then FLAG=1 fi done } job_stop
Windows服务器
如果应用运行的目标服务器是Windows环境的,则参考如下脚本示意
@echo off REM ####### 单进程软件包安装脚本模版说明 ####### REM 1. 此脚本默认在根路径下执行 windows系统默认为 C:\Users\Administrator REM 2. 您的部署脚本请编写在【user_shell】子程序中,建议您先将软件包复制到目标部署程序目录后再进行相关命令的处理 REM 3. 需遵循进程ID的存储约束 软件包进程ID标识需存储到指定路径 REM ##### 如果返回值为0,则认为此执行成功,如果非0,则认为执行失败 call :main exit /b %ERRORLEVEL% REM ##### 触发执行 日志由OOS自动记录 REM ############### 用户可修改区域 开始 ############### REM 由使用方基于系统页面填写 [!! 重要 !!] :user_conf SET DEPLOY_NAME=请填写部署物名称 SET SOFTWARE_NAME=请填写软件包名称 REM 执行成功/失败:y/n SET RETURN=y goto :eof REM 用户自定义安装脚本 REM 软件包会自动拉取到实例 “C:\Windows\system32” 路径下 REM 建议您先将软件包复制到目标部署程序目录后再进行相关指令的处理 :user_shell echo 这里是您的部署安装脚本位置 REM 执行成功/失败:y/n SET RETURN=n goto :eof REM ##### 在此函数中检查服务是否起来,可以是检查进程,curl http地址等方式 :check_health REM 执行成功/失败:y/n SET RETURN=y goto :eof REM ############### 用户可修改区域 结束 ############### REM ############### 以下内容禁止修改 ############### REM 1 => install fail REM 2 => check health fail REM 3 => record process id fail REM 4 => user shell fail REM ############### 可在脚本开始运行时调用,打印当时的时间戳及PID,同时记录软件包进程ID到指定路径 ############### :main SET RETURN=n call :user_conf echo user_conf函数执行返回值: %RETURN% if %RETURN%==n echo "exit code 3, record process id fail" && exit /b 3 echo %DEPLOY_NAME%-%SOFTWARE_NAME%-%DATE%-%TIME% > C:\main_process_id call :user_shell echo usershell函数执行返回值: %RETURN% if %RETURN%==n echo "exit code 4, user shell fail" && exit /b 4 call :check_health echo check_health函数执行返回值: %RETURN% if %RETURN%==n echo "exit code 2, check health fail" && exit /b 2 if %RETURN%==y echo "exit code 0, run deploy script success " && exit /b 0 goto :eof