*Nix下定时启动并重启程序的脚本

#!/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


 
  
 
  
 
  
 
  
 
 

你可能感兴趣的:(LinuxUnix,kill,path,java,脚本,c)