#!/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:
[火星人 ] *Nix下定時啟動並重啟程序的腳本 .已經有453次圍觀