From 642494ff3127d7d58b564deddffe3ed261717374 Mon Sep 17 00:00:00 2001 From: Teddysun Date: Mon, 9 Mar 2015 10:49:20 +0800 Subject: [PATCH] Add shadowsocks-go-debian auto start script --- shadowsocks-go-debian | 110 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 shadowsocks-go-debian diff --git a/shadowsocks-go-debian b/shadowsocks-go-debian new file mode 100644 index 0000000..ff3cd95 --- /dev/null +++ b/shadowsocks-go-debian @@ -0,0 +1,110 @@ +#!/bin/bash +# Start/stop shadowsocks. +# +### BEGIN INIT INFO +# Provides: shadowsocks +# Required-Start: +# Required-Stop: +# Should-Start: +# Should-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: shadowsocks is a lightweight tunneling proxy +### END INIT INFO + +# Note: this script requires sudo in order to run shadowsocks as the specified +# user. + +BIN=/usr/bin/shadowsocks-server +CONFIG_FILE=/etc/shadowsocks/config.json +#LOG_FILE=/var/log/shadowsocks +#USER=nobody +#GROUP=nobody +PID_DIR=/var/run +PID_FILE=$PID_DIR/shadowsocks.pid +RET_VAL=0 + +[ -x $BIN ] || exit 0 + +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 "shadowsocks-go running with PID $PID" + ;; + 1) + echo "shadowsocks-go not running, remove PID file $PID_FILE" + ;; + 2) + echo "Could not find PID file $PID_FILE, shadowsocks-go does not appear to be running" + ;; + esac + return 0 +} + +do_start() { + if [[ ! -d $PID_DIR ]]; then + mkdir $PID_DIR || echo "failed creating PID directory $PID_DIR"; exit 1 + fi + if check_running; then + echo "shadowsocks-go already running with PID $PID" + return 0 + fi + if [[ ! -r $CONFIG_FILE ]]; then + echo "config file $CONFIG_FILE not found" + return 1 + fi + echo "starting shadowsocks-go" + # sudo will set the group to the primary group of $USER + $BIN -c $CONFIG_FILE & + PID=$! + echo $PID > $PID_FILE + sleep 0.3 + if ! check_running; then + echo "start failed" + return 1 + fi + echo "shadowsocks-go running with PID $PID" + return 0 +} + +do_stop() { + if check_running; then + echo "stopping shadowsocks-go with PID $PID" + kill $PID + rm -f $PID_FILE + else + echo "Could not find PID file $PID_FILE" + fi +} + +do_restart() { + do_stop + do_start +} + +case "$1" in + start|stop|restart|status) + do_$1 + ;; + *) + echo "Usage: shadowsocks {start|stop|restart|status}" + RET_VAL=1 + ;; +esac + +exit $RET_VAL