diff --git a/shadowsocks-libev b/shadowsocks-libev index 0827604..dd9a025 100644 --- a/shadowsocks-libev +++ b/shadowsocks-libev @@ -1,123 +1,97 @@ #!/bin/bash -# -# Script to run Shadowsocks in daemon mode at boot time. -# Revision 1.0 -#==================================================================== -# Run level information: -# chkconfig: 2345 99 99 -# Description: lightweight secured socks5 proxy -# processname: ss-server -# Author: Teddysun -# Run "/sbin/chkconfig --add shadowsocks" to add the Run levels. -#==================================================================== -#==================================================================== -# Paths and variables and system checks. +### BEGIN INIT INFO +# chkconfig: 2345 90 10 +# Provides: Shadowsocks-libev +# Required-Start: $network $syslog +# Required-Stop: $network +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Fast tunnel proxy that helps you bypass firewalls +# Description: A secure socks5 proxy, designed to protect your Internet traffic. +### END INIT INFO + +# Author: Teddysun # Source function library . /etc/rc.d/init.d/functions # Check that networking is up. -# [ ${NETWORKING} ="yes" ] || exit 0 -# Daemon -NAME=shadowsocks-server -DAEMON=/usr/local/bin/ss-server - -# Path to the configuration file. -# +if [ -f /usr/local/bin/ss-server ]; then + DAEMON=/usr/local/bin/ss-server +elif [ -f /usr/bin/ss-server ]; then + DAEMON=/usr/bin/ss-server +fi +NAME=Shadowsocks-libev CONF=/etc/shadowsocks-libev/config.json +PID_DIR=/var/run +PID_FILE=$PID_DIR/shadowsocks-libev.pid +RET_VAL=0 -#USER="nobody" -#GROUP="nobody" +[ -x $DAEMON ] || exit 0 -# Take care of pidfile permissions -mkdir /var/run/$NAME 2>/dev/null || true -#chown "$USER:$GROUP" /var/run/$NAME - -# Check the configuration file exists. -# -if [ ! -f $CONF ] ; then -echo "The configuration file cannot be found!" -exit 0 +if [ ! -d $PID_DIR ]; then + mkdir -p $PID_DIR + if [ $? -ne 0 ]; then + echo "Creating PID directory $PID_DIR failed" + exit 1 + fi fi -# Path to the lock file. -# -LOCK_FILE=/var/lock/subsys/shadowsocks - -# Path to the pid file. -# -PID=/var/run/$NAME/pid - - -#==================================================================== - -#==================================================================== -# Run controls: - -RETVAL=0 - -# Start shadowsocks as daemon. -# -start() { -if [ -f $LOCK_FILE ]; then -echo "$NAME is already running!" -exit 0 -else -echo -n $"Starting ${NAME}: " -#daemon --check $DAEMON --user $USER "$DAEMON -f $PID -c $CONF > /dev/null" -daemon $DAEMON -u -c $CONF -f $PID +if [ ! -f $CONF ]; then + echo "$NAME config file $CONF not found" + exit 1 fi -RETVAL=$? -[ $RETVAL -eq 0 ] && success -echo -[ $RETVAL -eq 0 ] && touch $LOCK_FILE -return $RETVAL +do_start() { + if [ -f $PID_FILE ]; then + read PID < $PID_FILE + echo "$NAME (pid $PID) is already running..." + exit 0 + else + echo -n $"Starting ${NAME}: " + daemon $DAEMON -u -c $CONF -f $PID_FILE + fi + + RETVAL=$? + [ $RETVAL -eq 0 ] && success + echo } - -# Stop shadowsocks. -# -stop() { -echo -n $"Shutting down ${NAME}: " -killproc -p ${PID} -RETVAL=$? -[ $RETVAL -eq 0 ] -rm -f $LOCK_FILE -rm -f ${PID} -echo -return $RETVAL +do_stop() { + echo -n $"Stopping ${NAME}: " + killproc -p $PID_FILE + RETVAL=$? + [ $RETVAL -eq 0 ] + rm -f $PID_FILE + echo +} + +do_status() { + if [ -f $PID_FILE ]; then + read PID < $PID_FILE + echo "$NAME (pid $PID) is running..." + else + echo "$NAME is stopped" + RETVAL=1 + fi +} + +do_restart() { + do_stop + do_start } -# See how we were called. case "$1" in -start) -start -;; -stop) -stop -;; -restart) -stop -start -;; -condrestart) -if [ -f $LOCK_FILE ]; then -stop -start -RETVAL=$? -fi -;; -status) -status $DAEMON -RETVAL=$? -;; -*) -echo $"Usage: $0 {start|stop|restart|condrestart|status}" -RETVAL=1 + start|stop|restart|status) + do_$1 + ;; + *) + echo "Usage: $0 { start | stop | restart | status }" + RET_VAL=1 + ;; esac exit $RETVAL