- 论坛徽章:
- 0
|
*Nix下定时启动并重启程序的脚本 . - view plaincopy to clipboardprint?
- 01.<pre name="code" class="python">#!/bin/sh
- 02.
- 03.# 设置整个周期的间隔秒数
- 04.CYCLE_INTERVAL=86400
- 05.# 设置启动实例后杀死实例的间隔秒数
- 06.# = CYCLE_INTERVAL 时,代表周期性启动
- 07.# < CYCLE_INTERVAL 时,意味着存在一段不运行间隔时间
- 08.KILL_INTERVAL=86400
- 09.# 设置实例杀死后等待启动的间隔秒数
- 10.IDLE_INTERVAL=$(($( expr $(($CYCLE_INTERVAL)) - $(($KILL_INTERVAL)) )))
- 11.echo "启动实例后杀死实例的间隔秒数=$KILL_INTERVAL"
- 12.echo "实例杀死后等待启动的间隔秒数=$IDLE_INTERVAL"
- 13.
- 14.# 设置可执行sh文件的全路径
- 15.APP_PATH=/home/private/ECMDev/ECMServer-deploy/RtService/run-rtmonitor.sh
- 16.echo "实例启动路径=$APP_PATH"
- 17.
- 18.# 设置上述可执行文件中的启动参数特别的样式
- 19.# 对于java程序,请注意保证每个java程序启动参数 Xmx???? 中????各个不同即可
- 20.APP_PARTERN=Xmx514
- 21.echo "实例中特别的参数样式=$APP_PARTERN"
- 22.
- 23.echo -n "按任意键开始自动运行, Ctrl+C 退出 > "
- 24.read anykey
- 25.
- 26.FISRT_RUN="true"
- 27.
- 28.# 开始自动周期性运行
- 29.while true
- 30.do
- 31. # 杀死上一个运行的实例,防止上次没有干净退出
- 32. pid_apps=$(ps -ef | grep "$APP_PARTERN" | awk 'BEGIN{FS=" "}{print $2","$8}')
- 33. echo $pid_apps
- 34. for pid_app in $pid_apps; do
- 35. pid=$(echo $pid_app | awk 'BEGIN{FS=","}{print $1}')
- 36. app=$(echo $pid_app | awk 'BEGIN{FS=","}{print $2}')
- 37.
- 38. if [ "$pid" == "" ] || [ "$app" == "grep" ] || [ "$app" == "/bin/sh" ] || [ "$app" == "sh" ]; then
- 39. echo -n ""
- 40. else
- 41. echo -n "杀死运行的实例 (PID=$pid)"
- 42. kill -9 $pid
- 43. fi
- 44. done
- 45.
- 46. # 初始启动时立即执行实例
- 47. if [ "$FIRST_RUN" == "true" ]; then
- 48. FIRST_RUN="false"
- 49. else
- 50. echo "上一次运行的实例已完全退出,准备就绪,下一次运行等待 $IDLE_INTERVAL 秒后启动..."
- 51. sleep $IDLE_INTERVAL
- 52. fi
- 53.
- 54. # 在后台启动运行进程
- 55. cd $(dirname $APP_PATH)
- 56. $APP_PATH &
- 57.
- 58. sleep 1
- 59. echo "$KILL_INTERVAL 秒后杀死实例"
- 60. sleep $KILL_INTERVAL
- 61.done
复制代码 |
|