Skip to content

Commit b9c004e

Browse files
authored
Create kcp-server.init
1 parent e560b51 commit b9c004e

File tree

1 file changed

+242
-0
lines changed

1 file changed

+242
-0
lines changed

kcp-server.init

Lines changed: 242 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,242 @@
1+
#! /bin/bash
2+
# chkconfig: 2345 55 25
3+
# Description: Startup script for kcp-server on Debian. Place in /etc/init.d and
4+
# run 'update-rc.d -f kcp-server defaults', or use the appropriate command on your
5+
# distro. For CentOS/Redhat run: 'chkconfig --add kcp-server'
6+
#=======================================================
7+
# System Required: CentOS/Debian/Ubuntu (32bit/64bit)
8+
# Description: Manager for kcp-server, Written by Clang
9+
# Author: Clang
10+
# Intro: http://koolshare.cn/forum-72-1.html
11+
#=======================================================
12+
### BEGIN INIT INFO
13+
# Provides: kcp-server
14+
# Required-Start: $all
15+
# Required-Stop: $all
16+
# Default-Start: 2 3 4 5
17+
# Default-Stop: 0 1 6
18+
# Short-Description: starts the kcp-server
19+
# Description: starts kcp-server using start-stop
20+
### END INIT INFO
21+
22+
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
23+
runEnv="socks5" # set "ss" or "socks5",default socks5
24+
ProgramName="kcp-server"
25+
ProgramPath="/usr/local/kcp-server"
26+
Socks5Name="socks5"
27+
NAME=kcp-server
28+
BIN=${ProgramPath}/${NAME}
29+
SOCKS5BIN=${ProgramPath}/${Socks5Name}
30+
CONFIGFILE=${ProgramPath}/server-kcptun.json
31+
LOGFILE=${ProgramPath}/${ProgramName}.log
32+
SOCKS5LOGFILE=${ProgramPath}/${Socks5Name}.log
33+
SCRIPTNAME=/etc/init.d/${NAME}
34+
PID_DIR=/var/run
35+
PID_FILE=${PID_DIR}/${ProgramName}.pid
36+
PID_FILE_SOCKS5=${PID_DIR}/${Socks5Name}.pid
37+
version="2.0"
38+
RET_VAL=0
39+
40+
[ -x ${BIN} ] || exit 0
41+
[ -x ${SOCKS5BIN} ] || exit 0
42+
43+
fun_clangcn()
44+
{
45+
echo ""
46+
echo "+--------------------------------------------------+"
47+
echo "| Manager for ${NAME}, Written by Clang |"
48+
echo "+--------------------------------------------------+"
49+
echo "| Intro: http://koolshare.cn/forum-72-1.html |"
50+
echo "+--------------------------------------------------+"
51+
echo ""
52+
}
53+
54+
fun_check_run(){
55+
if netstat -ntupl | grep -q ${NAME};then
56+
return 0
57+
else
58+
rm -f ${PID_FILE}
59+
return 1
60+
fi
61+
}
62+
fun_check_socks5_run(){
63+
if netstat -ntupl | grep -q ${Socks5Name};then
64+
return 0
65+
else
66+
rm -f ${PID_FILE_SOCKS5}
67+
return 1
68+
fi
69+
}
70+
fun_load_config(){
71+
if [ ! -r ${CONFIGFILE} ]; then
72+
echo "config file ${CONFIGFILE} not found"
73+
return 1
74+
fi
75+
}
76+
fun_start()
77+
{
78+
log_flag="$1"
79+
if [ "${arg1}" = "start" ]; then
80+
fun_clangcn
81+
fi
82+
if [ ! -d ${PID_DIR} ]; then
83+
mkdir -p ${PID_DIR} || echo "failed creating PID directory ${PID_DIR}"; exit 1
84+
fi
85+
if [ "${runEnv}" == 'socks5' ]; then
86+
if fun_check_socks5_run; then
87+
echo "${Socks5Name} (pid `pidof $Socks5Name`) already running."
88+
if fun_check_run; then
89+
echo "${ProgramName} (pid `pidof $NAME`) already running."
90+
return 0
91+
fi
92+
return 0
93+
fi
94+
fi
95+
if fun_check_run; then
96+
echo "${ProgramName} (pid `pidof $NAME`) already running."
97+
return 0
98+
fi
99+
fun_load_config
100+
if [ "${runEnv}" == 'socks5' ]; then
101+
echo -n "Starting ${Socks5Name}..."
102+
socks5_port=`sed -n '/target/p' ${CONFIGFILE} | sed 's/[[:space:]]*//g;s/,//g;s/\"//g' | cut -d: -f3`
103+
if [ "${log_flag}" == 'log' ]; then
104+
${SOCKS5BIN} 0.0.0.0:${socks5_port} > ${SOCKS5LOGFILE} 2>&1 &
105+
else
106+
${SOCKS5BIN} 0.0.0.0:${socks5_port} >/dev/null 2>&1 &
107+
fi
108+
socks5PID=`pidof ${Socks5Name}`
109+
echo ${socks5PID} > ${PID_FILE_SOCKS5}
110+
sleep 0.3
111+
if ! fun_check_socks5_run; then
112+
echo "start failed"
113+
return 1
114+
fi
115+
echo " done"
116+
fi
117+
echo -n "Starting ${ProgramName}..."
118+
if [ "${log_flag}" == 'log' ]; then
119+
${BIN} -c ${CONFIGFILE} > ${LOGFILE} 2>&1 &
120+
else
121+
${BIN} -c ${CONFIGFILE} >/dev/null 2>&1 &
122+
fi
123+
PID=`pidof ${NAME}`
124+
echo $PID > $PID_FILE
125+
sleep 0.3
126+
if ! fun_check_run; then
127+
echo "start failed"
128+
return 1
129+
fi
130+
echo " done"
131+
${BIN} -v
132+
if [ "${runEnv}" == 'socks5' ]; then
133+
echo "${Socks5Name} (pid `pidof $Socks5Name`)is running."
134+
if [ "${log_flag}" == 'log' ]; then
135+
echo "read ${SOCKS5LOGFILE} for log"
136+
fi
137+
fi
138+
echo "${ProgramName} (pid `pidof $NAME`)is running."
139+
if [ "${log_flag}" == 'log' ]; then
140+
echo "read ${LOGFILE} for log"
141+
fi
142+
return 0
143+
}
144+
145+
fun_stop(){
146+
if [ "${arg1}" = "stop" ] || [ "${arg1}" = "restart" ]; then
147+
fun_clangcn
148+
fi
149+
if fun_check_run; then
150+
echo -n "Stoping ${ProgramName} (pid `pidof $NAME`)... "
151+
kill `pidof $NAME`
152+
if [ "$?" != 0 ] ; then
153+
echo " failed"
154+
exit 1
155+
else
156+
echo " done"
157+
rm -f $PID_FILE
158+
fi
159+
else
160+
echo "${ProgramName} is not running."
161+
fi
162+
if [ "${runEnv}" == 'socks5' ]; then
163+
if fun_check_socks5_run; then
164+
echo -n "Stoping ${Socks5Name} (pid `pidof $Socks5Name`)... "
165+
kill `pidof $Socks5Name`
166+
if [ "$?" != 0 ] ; then
167+
echo " failed"
168+
exit 1
169+
else
170+
echo " done"
171+
rm -f $PID_FILE_SOCKS5
172+
fi
173+
else
174+
echo "${Socks5Name} is not running."
175+
fi
176+
fi
177+
}
178+
fun_restart(){
179+
fun_stop
180+
fun_start
181+
}
182+
fun_status(){
183+
if netstat -ntulp | grep -q ${NAME}; then
184+
PID=`pidof ${NAME}`
185+
echo "${ProgramName} (pid $PID) is running..."
186+
netstat -ntulp | grep "${NAME}"
187+
else
188+
echo "${ProgramName} is stopped"
189+
exit 0
190+
fi
191+
echo ""
192+
if [ "${runEnv}" == 'socks5' ]; then
193+
if netstat -ntulp | grep -q ${Socks5Name}; then
194+
socks5PID=`pidof ${Socks5Name}`
195+
echo "${Socks5Name} (pid $socks5PID) is running..."
196+
netstat -ntulp | grep "${Socks5Name}"
197+
else
198+
echo "${Socks5Name} is stopped"
199+
exit 0
200+
fi
201+
fi
202+
}
203+
checkos(){
204+
if grep -Eqi "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release; then
205+
OS=CentOS
206+
elif grep -Eqi "Debian" /etc/issue || grep -Eq "Debian" /etc/*-release; then
207+
OS=Debian
208+
elif grep -Eqi "Ubuntu" /etc/issue || grep -Eq "Ubuntu" /etc/*-release; then
209+
OS=Ubuntu
210+
else
211+
echo "Not support OS, Please reinstall OS and retry!"
212+
exit 1
213+
fi
214+
}
215+
fun_config(){
216+
if [ -s ${CONFIGFILE} ]; then
217+
vi ${CONFIGFILE}
218+
else
219+
echo "${ProgramName} configuration file not found!"
220+
fi
221+
}
222+
fun_version(){
223+
${BIN} -v
224+
}
225+
226+
arg1=$1
227+
arg2=$2
228+
[ -z ${arg1} ]
229+
case "${arg1}" in
230+
start|stop|restart|status|config)
231+
fun_${arg1} ${arg2}
232+
;;
233+
[vV][eE][rR][sS][iI][oO][nN]|-[vV][eE][rR][sS][iI][oO][nN]|--[vV][eE][rR][sS][iI][oO][nN]|-[vV]|--[vV])
234+
fun_version
235+
;;
236+
*)
237+
fun_clangcn
238+
echo "Usage: $SCRIPTNAME {start|stop|restart|status|config|version}"
239+
RET_VAL=1
240+
;;
241+
esac
242+
exit $RET_VAL

0 commit comments

Comments
 (0)