#!/bin/bash ### BEGIN INIT INFO # Provides: Shadowsocks-go # Required-Start: $network $local_fs $remote_fs # Required-Stop: $network $local_fs $remote_fs # 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 NAME=Shadowsocks-go BIN=/usr/bin/shadowsocks-server CONF=/etc/shadowsocks/config.json PID_DIR=/var/run PID_FILE=$PID_DIR/shadowsocks-go.pid RET_VAL=0 [ -x $BIN ] || exit 0 if [[ ! -d $PID_DIR ]]; then mkdir -p $PID_DIR if [ $? -ne 0 ]; then echo "Creating PID directory $PID_DIR failed" RET_VAL=1 fi fi if [ ! -f $CONF ]; then echo "$NAME config file $CONF not found" exit 1 fi check_running() { if [[ -r $PID_FILE ]]; then read PID < $PID_FILE if [[ -d "/proc/$PID" ]]; then return 0 else rm -f $PID_FILE return 1 fi else return 2 fi } do_status() { check_running case $? in 0) echo "$NAME is running with PID $PID" ;; 1|2) echo "$NAME is not running" RET_VAL=1 ;; esac } do_start() { if check_running; then echo "$NAME is already running with PID $PID" return 0 fi $BIN -c $CONF 2>&1 > /dev/null & PID=$! echo $PID > $PID_FILE sleep 0.3 if check_running; then echo "$NAME start success" else echo "$NAME start failed" RET_VAL=1 fi } do_stop() { if check_running; then kill -9 $PID rm -f $PID_FILE echo "$NAME stop success" else echo "$NAME is not running" RET_VAL=1 fi } do_restart() { do_stop do_start } case "$1" in start|stop|restart|status) do_$1 ;; *) echo "Usage: $0 { start | stop | restart | status }" RET_VAL=1 ;; esac exit $RET_VAL