#!/bin/sh # 设置整个周期的间隔秒数 CYCLE_INTERVAL=86400 # 设置启动实例后杀死实例的间隔秒数 # = CYCLE_INTERVAL 时,代表周期性启动 # < CYCLE_INTERVAL 时,意味着存在一段不运行间隔时间 KILL_INTERVAL=86400 # 设置实例杀死后等待启动的间隔秒数 IDLE_INTERVAL=$(($( expr $(($CYCLE_INTERVAL)) - $(($KILL_INTERVAL)) ))) echo "启动实例后杀死实例的间隔秒数=$KILL_INTERVAL" echo "实例杀死后等待启动的间隔秒数=$IDLE_INTERVAL" # 设置可执行sh文件的全路径 APP_PATH=/home/private/ECMDev/ECMServer-deploy/RtService/run-rtmonitor.sh echo "实例启动路径=$APP_PATH" # 设置上述可执行文件中的启动参数特别的样式 # 对于java程序,请注意保证每个java程序启动参数 Xmx???? 中????各个不同即可 APP_PARTERN=Xmx514 echo "实例中特别的参数样式=$APP_PARTERN" echo -n "按任意键开始自动运行, Ctrl+C 退出 > " read anykey FISRT_RUN="true" # 开始自动周期性运行 while true do # 杀死上一个运行的实例,防止上次没有干净退出 pid_apps=$(ps -ef | grep "$APP_PARTERN" | awk 'BEGIN{FS=" "}{print $2","$8}') echo $pid_apps for pid_app in $pid_apps; do pid=$(echo $pid_app | awk 'BEGIN{FS=","}{print $1}') app=$(echo $pid_app | awk 'BEGIN{FS=","}{print $2}') if [ "$pid" == "" ] || [ "$app" == "grep" ] || [ "$app" == "/bin/sh" ] || [ "$app" == "sh" ]; then echo -n "" else echo -n "杀死运行的实例 (PID=$pid)" kill -9 $pid fi done # 初始启动时立即执行实例 if [ "$FIRST_RUN" == "true" ]; then FIRST_RUN="false" else echo "上一次运行的实例已完全退出,准备就绪,下一次运行等待 $IDLE_INTERVAL 秒后启动..." sleep $IDLE_INTERVAL fi # 在后台启动运行进程 cd $(dirname $APP_PATH) $APP_PATH & sleep 1 echo "$KILL_INTERVAL 秒后杀死实例" sleep $KILL_INTERVAL done