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} ]]; thenstartProcessId=`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."fimkdir-p${APP_HOME} user_shell if [ $?-ne0 ]; then exit4 #user shell failfi# 此处约束禁止删除pid=$!echo"process start success in ${APP_HOME}, pid: ${pid}."echo"${DEPLOY_NAME}:${SOFTWARE_NAME}" >> "${PROCESS_ID_PATH}"echo"${pid}" >> "${PROCESS_ID_PATH}"if [ $?-ne0 ]; then exit3 #record process id failfi} ##### 在此函数中检查服务是否起来,可以是检查进程,curl http地址等方式check_health() { now=$(date +'%Y-%m-%d %H:%M:%S')#自定义健康检查逻辑result=`curl http://localhost:7001/checkpreload.htm|grep success`if [[ "$result"-eq"" ]]; thenecho"[$now][$$] check_health"else exit2 #check health failfi} exit1() { echo"exit code 1, install fail"exit1} exit2() { echo"exit code 2, check health fail"exit2} exit3() { echo"exit code 3, record process id fail"exit3} exit4() { echo"exit code 4, user shell fail"exit4} exit5() { echo"exit code 5, jdk not effect fail"exit5} ##### 如果返回值为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=0function job_stop() { for line in`cat ${PID_FILE_PATH}`doif [[ ${FLAG}==1 ]]; thenkill-9$lineFLAG=0sed-i /${SOFTWARE_HOME}/,+1d ${PID_FILE_PATH}sed-i /${SOFTWARE_HOME}/d ${PID_FILE_PATH}fiif [[ $line=="${DEPLOY_NAME}:${SOFTWARE_HOME}" ]]; thenFLAG=1fidone} job_stop
Windows服务器
如果应用运行的目标服务器是Windows环境的,则参考如下脚本示意
@echooffREM####### 单进程软件包安装脚本模版说明 #######REM1.此脚本默认在根路径下执行windows系统默认为C:\Users\AdministratorREM2.您的部署脚本请编写在【user_shell】子程序中,建议您先将软件包复制到目标部署程序目录后再进行相关命令的处理REM3.需遵循进程ID的存储约束软件包进程ID标识需存储到指定路径REM##### 如果返回值为0,则认为此执行成功,如果非0,则认为执行失败call:mainexit/b%ERRORLEVEL%REM##### 触发执行 日志由OOS自动记录REM############### 用户可修改区域 开始 ###############REM由使用方基于系统页面填写[!!重要!!]:user_confSETDEPLOY_NAME=请填写部署物名称SETSOFTWARE_NAME=请填写软件包名称REM执行成功/失败:y/nSETRETURN=ygoto:eofREM用户自定义安装脚本REM软件包会自动拉取到实例“C:\Windows\system32”路径下REM建议您先将软件包复制到目标部署程序目录后再进行相关指令的处理:user_shellecho这里是您的部署安装脚本位置REM执行成功/失败:y/nSETRETURN=ngoto:eofREM##### 在此函数中检查服务是否起来,可以是检查进程,curl http地址等方式:check_healthREM执行成功/失败:y/nSETRETURN=ygoto:eofREM############### 用户可修改区域 结束 ###############REM############### 以下内容禁止修改 ###############REM1=>installfailREM2=>checkhealthfailREM3=>recordprocessidfailREM4=>usershellfailREM############### 可在脚本开始运行时调用,打印当时的时间戳及PID,同时记录软件包进程ID到指定路径 ###############:mainSETRETURN=ncall:user_confechouser_conf函数执行返回值:%RETURN%if%RETURN%==necho"exit code 3, record process id fail"&&exit/b3echo%DEPLOY_NAME%-%SOFTWARE_NAME%-%DATE%-%TIME%>C:\main_process_idcall:user_shellechousershell函数执行返回值:%RETURN%if%RETURN%==necho"exit code 4, user shell fail"&&exit/b4call:check_healthechocheck_health函数执行返回值:%RETURN%if%RETURN%==necho"exit code 2, check health fail"&&exit/b2if%RETURN%==yecho"exit code 0, run deploy script success "&&exit/b0goto:eof