| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 | #!/bin/sh### BEGIN INIT INFO# Provides:          v2ray# Required-Start:    $network $local_fs $remote_fs# Required-Stop:     $remote_fs# Default-Start:     2 3 4 5# Default-Stop:      0 1 6# Short-Description: V2Ray proxy services# Description:       V2Ray proxy services### END INIT INFO# Acknowledgements: Isulew Li <netcookies@gmail.com>DESC=v2rayNAME=v2rayDAEMON=/usr/bin/v2ray/v2rayPIDFILE=/var/run/$NAME.pidSCRIPTNAME=/etc/init.d/$NAMEDAEMON_OPTS="-config /etc/v2ray/config.json"# Exit if the package is not installed[ -x $DAEMON ] || exit 0# Read configuration variable file if it is present[ -r /etc/default/$NAME ] && . /etc/default/$NAME# Load the VERBOSE setting and other rcS variables. /lib/init/vars.sh# Define LSB log_* functions.# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.. /lib/lsb/init-functions## Function that starts the daemon/service#do_start(){    mkdir -p /var/log/v2ray    # Return    #   0 if daemon has been started    #   1 if daemon was already running    #   2 if daemon could not be started    #   3 if configuration file not ready for daemon    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \        || return 1    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --background -m -- $DAEMON_OPTS \        || return 2    # Add code here, if necessary, that waits for the process to be ready    # to handle requests from services started subsequently which depend    # on this one.  As a last resort, sleep for some time.}## Function that stops the daemon/service#do_stop(){    # Return    #   0 if daemon has been stopped    #   1 if daemon was already stopped    #   2 if daemon could not be stopped    #   other if a failure occurred    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE    RETVAL="$?"    [ "$RETVAL" = 2 ] && return 2    # Wait for children to finish too if this is a daemon that forks    # and if the daemon is only ever run from this initscript.    # If the above conditions are not satisfied then add some other code    # that waits for the process to drop all resources that could be    # needed by services started subsequently.  A last resort is to    # sleep for some time.    start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON    [ "$?" = 2 ] && return 2    # Many daemons don't delete their pidfiles when they exit.    rm -f $PIDFILE    return "$RETVAL"}## Function that sends a SIGHUP to the daemon/service#do_reload() {    #    # If the daemon can reload its configuration without    # restarting (for example, when it is sent a SIGHUP),    # then implement that here.    #    start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE    return 0}case "$1" in  start)    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"    do_start    case "$?" in        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;    esac  ;;  stop)    [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"    do_stop    case "$?" in        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;    esac    ;;  status)       status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?       ;;  reload|force-reload)    #    # If do_reload() is not implemented then leave this commented out    # and leave 'force-reload' as an alias for 'restart'.    #    log_daemon_msg "Reloading $DESC" "$NAME"    do_reload    log_end_msg $?    ;;  restart|force-reload)    #    # If the "reload" option is implemented then remove the    # 'force-reload' alias    #    log_daemon_msg "Restarting $DESC" "$NAME"    do_stop    case "$?" in      0|1)        do_start        case "$?" in            0) log_end_msg 0 ;;            1) log_end_msg 1 ;; # Old process is still running            *) log_end_msg 1 ;; # Failed to start        esac        ;;      *)        # Failed to stop        log_end_msg 1        ;;    esac    ;;  *)    #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2    echo "Usage: $SCRIPTNAME {start|stop|status|reload|restart|force-reload}" >&2    exit 3    ;;esac
 |