#!/bin/bash # chkconfig: 2345 90 10 # description: Start or stop the Shadowsocks server ### BEGIN INIT INFO # Provides: Shadowsocks # Required-Start: $network $syslog # Required-Stop: $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Description: Start or stop the Shadowsocks server ### END INIT INFO # Author: Teddysun if [ -f /usr/bin/ssserver ]; then BIN=/usr/bin/ssserver elif [ -f /usr/local/bin/ssserver ]; then BIN=/usr/local/bin/ssserver fi NAME=shadowsocks CONF=/etc/shadowsocks.json check_running(){ PID=`ps -ef | grep -v grep | grep -i "${BIN}" | awk '{print $2}'` if [ -n $PID ]; then return 0 else return 1 fi } do_start(){ check_running if [ $? -eq 0 ]; then echo "$NAME is already running with PID $PID" RETVAL=1 else $BIN -c $CONF -d start RETVAL=$? if [ $RETVAL -eq 0 ]; then echo "$NAME start success" else echo "$NAME start failed" RETVAL=1 fi fi } do_stop(){ check_running if [ $? -eq 0 ]; then $BIN -c $CONF -d stop RETVAL=$? if [ $RETVAL -eq 0 ]; then echo "$NAME stop success" else echo "$NAME stop failed" RETVAL=1 fi else echo "$NAME is not running" RETVAL=1 fi } do_status(){ check_running if [ $? -eq 0 ]; then echo "$NAME is running with PID $PID" RETVAL=0 else echo "$NAME is not running" RETVAL=1 fi } do_restart(){ do_stop do_start } case "$1" in start|stop|restart|status) do_$1 ;; *) echo "Usage: $0 { start | stop | restart | status }" RETVAL=1 ;; esac exit $RETVAL