athena-start 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #!/bin/sh
  2. #source var/function
  3. . ./function.sh
  4. inst_launch_workaround
  5. PATH=./:$PATH
  6. print_start() {
  7. # more << EOF
  8. echo "Athena Starting..."
  9. echo " (c) 2013 rAthena Project"
  10. echo ""
  11. echo ""
  12. echo "checking..."
  13. #EOF
  14. }
  15. get_status(){
  16. PIDFILE=.$1.pid
  17. if [ -e ${PIDFILE} ]; then
  18. ISRUN=$(ps ax | grep $(cat ${PIDFILE}) | grep $1)
  19. PSRUN=$(echo "$ISRUN" | awk '{ print substr( $0, 0, 7) }')
  20. fi
  21. return $PSRUN
  22. }
  23. #cheking if already started, launch and mark in log
  24. start_serv(){
  25. get_status $1
  26. if [ $2 ]; then #is logging on ?
  27. LOGFILE="log/$1.launch.log"
  28. LOGRUN="log/$1.log"
  29. FIFO="$1_fifo"
  30. echo "stat_serv, log is enabled"
  31. echo "My logfile=${LOGFILE}"
  32. if [ -z ${PSRUN} ]; then
  33. if [ -e ./${FIFO} ]; then rm "$FIFO"; fi
  34. mkfifo "$FIFO"; tee "$LOGRUN" < "$FIFO" & "./$1" > "$FIFO" 2>&1 & PID=$!
  35. #"./$1" > >(tee "$LOGRUN") 2>&1 & PID=$! #bash only
  36. echo "$PID" > .$1.pid
  37. echo "Server '$1' started at `date +"%m-%d-%H:%M-%S"`" | tee ${LOGFILE}
  38. else
  39. echo "Can't start '$1', cause is already running p${PSRUN}" | tee ${LOGFILE}
  40. fi
  41. else
  42. if [ -z ${PSRUN} ]; then
  43. ./$1&
  44. echo "$!" > .$1.pid
  45. echo "Server '$1' started at `date +"%m-%d-%H:%M-%S"`"
  46. else
  47. echo "Can't start '$1', cause is already running p${PSRUN}"
  48. fi
  49. fi
  50. }
  51. #experimental
  52. watch_serv(){
  53. LOGFILE="log/$1.launch.log"
  54. LOGRUN="log/$1.log"
  55. FIFO="$1_fifo"
  56. ulimit -Sc unlimited
  57. while true; do
  58. get_status $1
  59. if [ -z ${PSRUN} ]; then
  60. $count=$count+1
  61. echo "server '$1' is down" | tee ${LOGFILE}
  62. echo "restarting server at time at `date +"%m-%d-%H:%M-%S"`" | tee ${LOGFILE}
  63. if [ -e ./${FIFO} ]; then rm "$FIFO"; fi
  64. mkfifo "$FIFO"; tee "$LOGRUN" < "$FIFO" & "./$1" > "$FIFO" 2>&1 & PID=$!
  65. echo "$PID" > .$1.pid
  66. if [ $3 ] && [ $3 -lt $count ]; then break; fi
  67. else sleep $2
  68. fi
  69. done
  70. }
  71. restart(){
  72. $0 stop
  73. for i in ${L_SRV} ${C_SRV} ${M_SRV}
  74. do
  75. FIFO="$1_fifo"
  76. while true; do
  77. get_status ${i}
  78. if [ ${PSRUN} ]; then echo "'${i}' is still running p${PSRUN} waiting end"; sleep 2;
  79. else
  80. if [ -e ./${FIFO} ]; then rm "$FIFO"; fi
  81. break
  82. fi
  83. done
  84. done
  85. $0 start
  86. }
  87. case $1 in
  88. 'start')
  89. print_start
  90. check_files
  91. echo "Check complete."
  92. echo "Looks good, a nice Athena!"
  93. if [ "$2" = "--enlog" ]; then
  94. ENLOG=1
  95. echo "Logging is enable"
  96. else
  97. echo "Logging is disable"
  98. fi
  99. for i in ${L_SRV} ${C_SRV} ${M_SRV}
  100. do
  101. start_serv $i $ENLOG
  102. done
  103. echo "Now Started Athena."
  104. ;;
  105. 'watch')
  106. for i in ${L_SRV} ${C_SRV} ${M_SRV}
  107. do
  108. watch_serv $i 10 3
  109. done
  110. echo "Now watching Athena."
  111. ;;
  112. 'stop')
  113. for i in ${L_SRV} ${C_SRV} ${M_SRV}
  114. do
  115. PIDFILE=.${i}.pid
  116. if [ -e ./${PIDFILE} ]; then
  117. kill $(cat ${PIDFILE})
  118. rm ${PIDFILE}
  119. fi
  120. done
  121. ;;
  122. 'restart')
  123. restart
  124. ;;
  125. 'status')
  126. for i in ${L_SRV} ${C_SRV} ${M_SRV}
  127. do
  128. get_status ${i}
  129. if [ ${PSRUN} ]; then echo "'${i}' is running p${PSRUN}"; else echo "'${i}' seem down"; fi
  130. done
  131. ;;
  132. *)
  133. echo "Usage: athena-start { start | stop | restart | status | watch }"
  134. echo "option --enlog will tee output into a logfile"
  135. read -p "Enter a valid option: " readEnterKey
  136. $0 $readEnterKey
  137. ;;
  138. esac