*Nix下定时启动并重启程序的脚本 .
*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 转帖也要专业嘛
行号都不删:dizzy:
页:
[1]