原创作品,允许转载,转载时请务必以超链接形式标明文章
原始出处 、作者信息和本声明。否则将追究法律责任。
http://dgd2010.blog.51cto.com/1539422/1674188
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
|
#!/bin/bash
#chkconfig: 345 86 14
#description: Startup and shutdown script for ChatterServer(Port:$SERVICEPORT))
VERSION=1.0.0-snapshot
BASEDIR=..
# choose LOGDIR as standard of work directory
LOGDIR=$(
pwd
)/$BASEDIR
/logs
if
[[ ! -d $LOGDIR ]];
then
mkdir
$LOGDIR
fi
#SERVICEPORT=29093
#SERVICEPORT=`grep ^port $(pwd)/../conf/constant.properties | awk -F '=' '{print $2}'`
# NOTE: $(pwd)/../conf/constant.properties file fileformat must be unix NOT dos in shell scripts, or will cause some unknown error
# NOTE: grep is vrey sensitive to dos fileformat or unix fileformat
# apt-get install dos2unix
PORTFILE=$(
pwd
)/..
/conf/constant
.properties
SERVICEPORT=$(
cat
$PORTFILE | dos2unix |
grep
^port |
awk
-F
'='
'{print $2}'
)
PIDFILE=$LOGDIR
/chatter
.pid
SERVER=$(
pwd
)/$BASEDIR
/chatter-
$VERSION\.jar
BASENAME=chatter
ARGS=
"-Xms2g -Xmx4g -Xmn4g -Xss128k -XX:MaxPermSize=64m -XX:-UseParallelGC -XX:+UseParallelOldGC -XX:ParallelGCThreads=4 -XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=30 -XX:SurvivorRatio=6"
# -Xms2g -Xmx2g -Xmn2g -Xss128k -XX:MaxPermSize=64m -XX:-UseParallelGC -XX:+UseParallelOldGC -XX:ParallelGCThreads=4 -XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=30 -XX:SurvivorRatio=6
status() {
# The judgment priority: pid > port > piffile
# netstat run by common user will get some error output, so we put those error outout to /dev/null
if
[[ $(
netstat
-anop 2>
/dev/null
|
grep
$SERVICEPORT |
grep
LISTEN) || -f $PIDFILE ]];
then
#pid=$(cat $PIDFILE)
pid=$(
ps
-ef |
grep
java |
grep
$BASENAME |
grep
-
v
grep
|
awk
'{print $2}'
)
if
[[ $pid !=
""
&& $(
ps
-ef |
grep
$pid |
grep
-
v
grep
) ]];
then
echo
"SUCCESS: ChatterServer(Port:$SERVICEPORT) is OK"
exit
0
else
echo
"ERROR: ChatterServer(Port:$SERVICEPORT) pid is NOT exist"
exit
1
fi
elif
[[ ! $(
netstat
-anop 2>
/dev/null
|
grep
$SERVICEPORT |
grep
LISTEN) ]];
then
echo
"ERROR: ChatterServer(Port:$SERVICEPORT) port is NOT listen"
exit
1
elif
[[ ! -f $PIDFILE ]];
then
echo
"ERROR: ChatterServer(Port:$SERVICEPORT) pid file is NOT exist"
exit
1
else
echo
"ERROR: ChatterServer(Port:$SERVICEPORT) is NOT running"
exit
1
fi
}
start() {
if
[[ -e $PIDFILE ]];
then
echo
"ERROR: pidfile $PIDFILE exist, ChatterServer(Port:$SERVICEPORT) has started with pid $(cat $PIDFILE)"
# pid file can be deleted
/bin/rm
-f $PIDFILE
exit
1
fi
if
[[ -e $SERVER ]];
then
echo
"INFO: Starting ChatterServer(Port:$SERVICEPORT)"
# Start ChatterServer core daemon
# Why using "date +"%Y%m%d""? Because we just need restart this once per day
# For ChatterServer wiil find some file in $BASEDIR
cd
$LOGDIR/../
#nohup java -jar $SERVER $ARGS >>$LOGDIR/console-$(date +"%Y%m%d").out 2>&1 &
java -jar $SERVER $ARGS >>$LOGDIR
/console-
$(
date
+
"%Y%m%d"
).out 2>&1 &
#java -jar $SERVER $ARGS >$LOGDIR/console.out 2>&1 &
RETVAL=$?
# shell do NOT need home directory
## For ChatterServer wiil find some file in $BASEDIR
cd
$LOGDIR/..
/bin
if
[[ $RETVAL -
eq
0 ]];
then
## $! --> Expands to the process ID of the most recently executed background (asynchronous) command.
#echo $! > $PIDFILE
# For java performance issue, port 29092 will listen latter, we will waiting for 2 second
sleep
2
# get pid var
# TODO remove debug info
#echo "DEBUG: "
#ps -ef | grep $BASENAME | grep -v grep | awk '{print $2}'
# end debug
#pid=$(ps -ef | grep java | grep $BASENAME | grep -v grep | awk '{print $2}')
pid=$(
netstat
-anop 2>
/dev/null
|
grep
$SERVICEPORT |
grep
LISTEN |
awk
'{print $7}'
|
awk
-F
'/'
'{print $1}'
)
# send pid number to pid file
echo
$pid > $PIDFILE
# Those lines will remove in next release
# TODO remove debug info
#echo "DEBUG: live 1"
# For java performance issue, port 29092 will listen latter, so we change judgment conditions
if
[[ $(
netstat
-anop 2>
/dev/null
|
grep
$SERVICEPORT |
grep
LISTEN) || -f $PIDFILE ]];
then
echo
"SUCCESS: ChatterServer(Port:$SERVICEPORT) start OK"
# Setting up start log
echo
"[ $(date +"
%D %T
") ] SUCCESS: ChatterServer(Port:$SERVICEPORT) started with pid $(cat $PIDFILE) "
>>$LOGDIR
/service
.log
fi
# TODO remove debug info
#echo "DEBUG: live 2"
# -Those lines will remove in next release
#echo "SUCCESS: ChatterServer start OK"
## Setting up start log
#echo "[ $(date +"%D %T") ] SUCCESS: ChatterServer started with pid $(cat $PIDFILE) " >>$LOGDIR/service.log
else
echo
"ERROR: ChatterServer(Port:$SERVICEPORT) start failed"
# Setting up start log
echo
"[ $(date +"
%D %T
") ] ERROR: ChatterServer(Port:$SERVICEPORT) start failed "
>>$LOGDIR
/service
.log
exit
$RETVAL
fi
else
echo
"ERROR: Couldn't find $SERVER"
# TODO We just think this is not essential
# Do NOT setting up log here
exit
1
fi
}
stop() {
if
[[ -e $PIDFILE ]];
then
pid=$(
cat
$PIDFILE)
#if kill -TERM $PIDFILE >/dev/null 2>&1
# TODO remove debug info
#echo "DEBUG: $LOGDIR/console-$(date +"%Y%m%d").out"
# Ubuntu can NOT use "usleep", so use "sleep" instead
# usleep 100000
if
kill
-TERM $pid >>$LOGDIR
/console-
$(
date
+
"%Y%m%d"
).out &&
sleep
1
then
echo
"SUCCESS: ChatterServer(Port:$SERVICEPORT) stop OK with TERM"
# Setting up stop log
echo
"[ $(date +"
%D %T
") ] SUCCESS: ChatterServer(Port:$SERVICEPORT) stop OK with TERM "
>>$LOGDIR
/service
.log
# Because we can NOT use usleep , so we must comment out sleep 1 next
#sleep 1
# Ubuntu can NOT use "usleep", so use "sleep" instead
# usleep 100000
elif
kill
-KILL $pid >
/dev/null
2>&1 &&
sleep
1
then
echo
"SUCCESS: ChatterServer(Port:$SERVICEPORT) stop OK with KILL"
# Setting up stop log
echo
"[ $(date +"
%D %T
") ] SUCCESS: ChatterServer(Port:$SERVICEPORT) stop OK with KILL "
>>$LOGDIR
/service
.log
# Because we can NOT use usleep , so we must comment out sleep 1 next
#sleep 1
else
echo
"ERROR: ChatterServer(Port:$SERVICEPORT) stop faild"
# Setting up stop log
echo
"[ $(date +"
%D %T
") ] ERROR: ChatterServer(Port:$SERVICEPORT) stop failed "
>>$LOGDIR
/service
.log
exit
1
fi
# Remove pid file
if
[[ -f $PIDFILE ]];
then
/bin/rm
-f $PIDFILE
fi
else
echo
"ERROR: No ChatterServer(Port:$SERVICEPORT) running"
# TODO We just think this is not essential
# Do NOT setting up log here
exit
1
fi
}
restart() {
echo
"INFO: Restarting ChatterServer(Port:$SERVICEPORT)"
stop
# Those lines will remove in next release
if
[[ $(
netstat
-anop 2>
/dev/null
|
grep
$SERVICEPORT |
grep
LISTEN) ]];
then
echo
"WARNNING: port $SERVICEPORT is in using, must waiting"
sleep
5
if
[[ $(
netstat
-anop 2>
/dev/null
|
grep
$SERVICEPORT |
grep
LISTEN) ]];
then
echo
"WARNNING : port $SERVICEPORT is still in using, must waiting"
sleep
2
fi
fi
# -Those lines will remove in next release
# Do NOT using sleep any seconds here with stop() function used
start
}
case
$1
in
status)
status
;;
start)
start
;;
stop)
stop
;;
restart)
restart
;;
help|*)
echo
"Usage: $0 {status|start|stop|restart|help} with $0 itself"
exit
1
;;
esac
# replace "exit 0" with ":"
#exit 0
:
|