-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathctl.sh
executable file
·138 lines (125 loc) · 3.07 KB
/
ctl.sh
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
#!/bin/bash
PWD=`cd $(dirname "${BASH_SOURCE[0]}") && pwd`
APP_BIN="php"
APP_ENTRY="$PWD/index.php"
LOG_DIR="$PWD/application/logs"
PROGS=(
"apns feedloop"
"apns pushloop prod"
)
PROC_ID=""
PROC_ID_LIST=""
get_concat_name() {
echo "$*" | tr ' ' '-'
}
chk_pidfile() {
local name="$1"
local pid_file="$LOG_DIR/$name.pid"
if [ ! -f "$pid_file" ]; then
echo "$pid_file is not exists"
exit 0;
fi
}
chk_process() {
local name="$1"
local pid_file="$LOG_DIR/$name.pid"
PROC_ID=`cat $pid_file`;
if [ -z "$PROC_ID" ]; then
echo "$pid_file is empty"
exit 0;
fi
local FIND_ID=`ps -f --no-heading --pid $PROC_ID | awk '/$PROC_CMD/{print $2}'`
if [ ! x"$FIND_ID" = x"$PROC_ID" ]; then
echo "Process $PROC_ID has termined"
fi
}
grep_process_pids() {
local params="$*"
local app_file="$APP_ENTRY $params"
PROC_ID_LIST=`ps -efww | grep "$app_file" | grep -v grep | cut -c 9-15 | xargs`
if [ -z "$PROC_ID_LIST" ]; then
echo "Process $params is not running"
fi
}
split_logfile() {
local name="$1"
local log_file="$LOG_DIR/$name.log"
if [ -f "$log_file" ] && [ -s "$log_file" ]; then
local lognum=`ls -1 $log_file* | wc -l`
if [ "$lognum" -gt "1" ]; then
local lastfile=`ls -1 $log_file* | tail -1`
lognum=`expr ${lastfile##*.} + 1`
fi
local flowno=`printf %03d $lognum`
mv "$log_file" "$log_file.$flowno"
fi
}
start_server() {
local params="$*"
local name=$(get_concat_name $params)
split_logfile $name
local pid_file="$LOG_DIR/$name.pid"
local log_file="$LOG_DIR/$name.log"
local app_file="$APP_ENTRY $params"
$APP_BIN $app_file >> $log_file 2>&1 &
echo $! > $pid_file
echo "$params starting"
}
stop_server() {
local params="$*"
local name=$(get_concat_name $params)
local pid_file="$LOG_DIR/$name.pid"
chk_pidfile $name && chk_process $name
if [[ "$PROC_ID" =~ ^[0-9]+$ ]]; then
kill -9 $PROC_ID
fi
rm -f $pid_file
echo "$params stopped"
}
close_all_server() {
local params="$*"
grep_process_pids $params
if [ ! x"$PROC_ID_LIST" = x ]; then
kill -9 $PROC_ID_LIST
fi
echo "$params closed"
}
keep_server_running() {
local params="$*"
grep_process_pids $params
if [ x"$PROC_ID_LIST" = x ]; then
start_server $params
fi
}
case "$1" in
start)
for name in "${PROGS[@]}" ; do
start_server $name
done
;;
stop)
for name in "${PROGS[@]}" ; do
stop_server $name
done
;;
restart | reload)
for name in "${PROGS[@]}" ; do
close_all_server $name
start_server $name
done
;;
close)
for name in "${PROGS[@]}" ; do
close_all_server $name
done
;;
kill)
for name in "${PROGS[@]}" ; do
close_all_server $name
done
;;
*)
for name in "${PROGS[@]}" ; do
keep_server_running $name
done
esac