forked from rathena/rathena
-
Notifications
You must be signed in to change notification settings - Fork 0
/
athena-start
executable file
·219 lines (207 loc) · 5.7 KB
/
athena-start
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
#!/bin/sh
#source var/function
. ./function.sh
inst_launch_workaround
PATH=./:$PATH
LOG_DIR="./log"
print_start() {
# more << EOF
echo "Athena Starting..."
echo " (c) 2013 rAthena Project"
echo ""
echo ""
echo "checking..."
#EOF
}
get_status(){
PIDFILE=.$1.pid
if [ -e ${PIDFILE} ]; then
ISRUN=$(ps ax | grep $(cat ${PIDFILE}) | grep $1)
PSRUN=$(echo "$ISRUN" | awk '{ print substr( $0, 0, 7) }')
fi
#return ${PSRUN} #seem to cause issue for some os
}
#cheking if already started, launch and mark in log
start_serv(){
get_status $1
if [ $2 ]; then #is logging on ?
LOGFILE="$LOG_DIR/$1.launch.log"
LOGRUN="$LOG_DIR/$1.log"
FIFO="$1_fifo"
echo "stat_serv, log is enabled"
echo "My logfile=${LOGFILE}"
if [ -z ${PSRUN} ]; then
if [ -e ./${FIFO} ]; then rm "$FIFO"; fi
mkfifo "$FIFO"; tee "$LOGRUN" < "$FIFO" & "./$1" > "$FIFO" 2>&1 & PID=$!
#"./$1" > >(tee "$LOGRUN") 2>&1 & PID=$! #bash only
echo "$PID" > .$1.pid
echo "Server '$1' started at `date +"%m-%d-%H:%M-%S"`" | tee ${LOGFILE}
else
echo "Can't start '$1', cause is already running p${PSRUN}" | tee ${LOGFILE}
fi
else
if [ -z ${PSRUN} ]; then
./$1&
echo "$!" > .$1.pid
echo "Server '$1' started at `date +"%m-%d-%H:%M-%S"`"
else
echo "Can't start '$1', cause is already running p${PSRUN}"
fi
fi
}
watch_serv(){
ulimit -Sc unlimited
#now checking status and looping
count=0;
while true; do
for i in ${L_SRV} ${C_SRV} ${M_SRV}
do
LOGFILE="$LOG_DIR/$i.launch.log"
LOGRUN="$LOG_DIR/$i.log"
FIFO=$i"_fifo"
get_status $i
#echo "Echo id of $i is ${PSRUN}"
if [ -z ${PSRUN} ]; then
count=$((count+1))
#echo "fifo=$FIFO"
echo "server '$i' is down"
echo "server '$i' is down" >> ${LOGFILE}
echo "restarting server at time at `date +"%m-%d-%H:%M-%S"`"
echo "restarting server at time at `date +"%m-%d-%H:%M-%S"`" >> ${LOGFILE}
if [ -e $FIFO ]; then rm $FIFO; fi
mkfifo "$FIFO"; tee "$LOGRUN" < "$FIFO" & "./$i" > "$FIFO" 2>&1 & PID=$!
echo "$PID" > .$i.pid
if [ $2 ] && [ $2 -lt $count ]; then break; fi
fi
done
sleep $1
done
}
restart(){
$0 stop
if [ $1 ]; then sleep $1; fi
for i in ${L_SRV} ${C_SRV} ${M_SRV}
do
FIFO="$1_fifo"
while true; do
get_status ${i}
if [ ${PSRUN} ]; then echo "'${i}' is still running p${PSRUN} waiting end"; sleep 2;
else
if [ -e ./${FIFO} ]; then rm "$FIFO"; fi
break
fi
done
done
$0 start
}
case $1 in
'start')
print_start
check_files
echo "Check complete."
echo "Looks good, a nice Athena!"
if [ "$2" = "--enlog" ]; then
ENLOG=1
if [ ! -d "$LOG_DIR" ]; then mkdir -p $LOG_DIR; fi
echo "Logging is enable in $LOG_DIR"
else
echo "Logging is disable"
fi
for i in ${L_SRV} ${C_SRV} ${M_SRV}
do
start_serv $i $ENLOG
done
echo "Now Started Athena."
;;
'watch')
if [ ! -d "$LOG_DIR" ]; then mkdir -p $LOG_DIR; fi
if [ -z $2 ]; then Restart_count=10; else Restart_count=$2; fi
if [ -z $3 ]; then Restart_sleep=3; else Restart_sleep=$3; fi
echo " Gonna watch rA for Restart_count = $Restart_count, Restart_sleep= $Restart_sleep"
for i in ${L_SRV} ${C_SRV} ${M_SRV}
do
start_serv $i 1
done
watch_serv $Restart_count $Restart_sleep
echo "Now watching Athena."
;;
'stop')
for i in ${L_SRV} ${C_SRV} ${M_SRV}
do
PIDFILE=.${i}.pid
if [ -e ./${PIDFILE} ]; then
kill $(cat ${PIDFILE})
rm ${PIDFILE}
fi
done
;;
'restart')
restart
;;
'status')
for i in ${L_SRV} ${C_SRV} ${M_SRV}
do
get_status ${i}
if [ ${PSRUN} ]; then echo "'${i}' is running p${PSRUN}"; else echo "'${i}' seem down"; fi
done
;;
'val_runonce')
for i in ${L_SRV} ${C_SRV} ${M_SRV}
do
valgrind --leak-check=full --show-leak-kinds=all ./$i --run-once > "log/$i.runonce.leak"
done
;;
'valchk')
for i in ${L_SRV} ${C_SRV} ${M_SRV}
do
valgrind --leak-check=full --show-leak-kinds=all ./$i > "log/$i.runonce.leak"
done
;;
'help')
case $2 in
'start')
echo "syntax: 'start {--enlog}'"
echo "This option will starts the servs"
echo "--enlog will tee all terminal output into a log/$servname.log file"
;;
'stop')
echo "This option will shutdowns the servs'"
;;
'restart')
echo "syntax: 'restart {<delay>}'"
echo "This option will wait delay then will attempt to restart the servs"
echo "NB, even if delay is over it will wait the pid is finished before atetmpting to restart servs"
;;
'status')
echo "syntax: 'watch {<restart_intervall> <restart_count>}'"
echo "This option let you know if the server are running or not"
echo "NB this option is based on PID and supposed you have launch the serv by this script"
echo " If it wasn't the case please use something like 'ps ax | grep server' to know their status"
;;
'watch')
echo "syntax: 'watch {<restart_intervall> <restart_count>}'"
echo "The watch option allow you to auto restart the server when this one was stopped"
echo "<restart_intervall> delay in second before recheking if server are down (default 10) "
echo "<restart_count> how many time should we restart servs (default 3), (-1=undefinitly)"
;;
'val_runonce')
echo "syntax: 'val_runonce'"
echo "This option will run valgrin with run-once to check the serv"
;;
'valchk')
echo "syntax: 'valchk'"
echo "This option will run valgrin with the serv"
;;
*)
echo "Please specify a command you'll like more info { start | stop | restart | status | watch }"
read -p "Enter a valid command: " readEnterKey
$0 "help" $readEnterKey
;;
esac
;;
*)
echo "Usage: athena-start { start | stop | restart | status | watch | help | val_runonce | valchk }"
read -p "Enter a valid option: " readEnterKey
$0 $readEnterKey
;;
esac