1#! /bin/sh 2### BEGIN INIT INFO 3# Provides: nghttpx 4# Required-Start: $remote_fs $syslog 5# Required-Stop: $remote_fs $syslog 6# Default-Start: 2 3 4 5 7# Default-Stop: 0 1 6 8# Short-Description: nghttpx initscript 9# Description: nghttpx initscript 10### END INIT INFO 11 12# Author: Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> 13# 14# Do NOT "set -e" 15 16# PATH should only include /usr/* if it runs after the mountnfs.sh script 17PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin 18DESC="HTTP/2 reverse proxy" 19NAME=nghttpx 20# Depending on the configuration, binary may be located under @sbindir@ 21DAEMON=@bindir@/$NAME 22PIDFILE=/var/run/$NAME.pid 23DAEMON_ARGS="--conf /etc/nghttpx/nghttpx.conf --pid-file=$PIDFILE --daemon" 24SCRIPTNAME=/etc/init.d/$NAME 25 26# Exit if the package is not installed 27[ -x "$DAEMON" ] || exit 0 28 29# Read configuration variable file if it is present 30[ -r /etc/default/$NAME ] && . /etc/default/$NAME 31 32# Load the VERBOSE setting and other rcS variables 33. /lib/init/vars.sh 34 35# Define LSB log_* functions. 36# Depend on lsb-base (>= 3.2-14) to ensure that this file is present 37# and status_of_proc is working. 38. /lib/lsb/init-functions 39 40# 41# Function that starts the daemon/service 42# 43do_start() 44{ 45 # Return 46 # 0 if daemon has been started 47 # 1 if daemon was already running 48 # 2 if daemon could not be started 49 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ 50 || return 1 51 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ 52 $DAEMON_ARGS \ 53 || return 2 54 # Add code here, if necessary, that waits for the process to be ready 55 # to handle requests from services started subsequently which depend 56 # on this one. As a last resort, sleep for some time. 57} 58 59# 60# Function that stops the daemon/service 61# 62do_stop() 63{ 64 # Return 65 # 0 if daemon has been stopped 66 # 1 if daemon was already stopped 67 # 2 if daemon could not be stopped 68 # other if a failure occurred 69 start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE 70 RETVAL="$?" 71 [ "$RETVAL" = 2 ] && return 2 72 73 # Wait for children to finish too if this is a daemon that forks 74 # and if the daemon is only ever run from this initscript. 75 # If the above conditions are not satisfied then add some other code 76 # that waits for the process to drop all resources that could be 77 # needed by services started subsequently. A last resort is to 78 # sleep for some time. 79 #start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON 80 #[ "$?" = 2 ] && return 2 81 # Many daemons don't delete their pidfiles when they exit. 82 rm -f $PIDFILE 83 return "$RETVAL" 84} 85 86case "$1" in 87 start) 88 [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" 89 do_start 90 case "$?" in 91 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 92 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; 93 esac 94 ;; 95 stop) 96 [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" 97 do_stop 98 case "$?" in 99 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 100 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; 101 esac 102 ;; 103 status) 104 status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? 105 ;; 106 upgrade) 107 log_daemon_msg "Upgrading $DESC" "$NAME" 108 oldpid=`pidofproc -p $PIDFILE $NAME` 109 case "$?" in 110 0) 111 log_progress_msg "Sending SIGUSR2 to $oldpid..." 112 kill -USR2 $oldpid 113 log_progress_msg "Waiting for new binary..." 114 for i in 1 2 3 4 5 ; do 115 sleep 1 116 newpid=`pidofproc -p $PIDFILE $NAME` 117 if [ "$newpid" != "$oldpid" ] ; then 118 break 119 fi 120 done 121 if [ "$newpid" != "$oldpid" ] ; then 122 log_progress_msg "Sending SIGQUIT to $oldpid..." 123 kill -QUIT $oldpid 124 log_end_msg 0 125 else 126 log_progress_msg "New binary failed to start" 127 log_end_msg 1 128 fi 129 ;; 130 *) 131 log_progress_msg "pidofproc() failed" 132 log_end_msg 1 133 ;; 134 esac 135 ;; 136 restart|force-reload) 137 # 138 # If the "reload" option is implemented then remove the 139 # 'force-reload' alias 140 # 141 log_daemon_msg "Restarting $DESC" "$NAME" 142 do_stop 143 case "$?" in 144 0|1) 145 do_start 146 case "$?" in 147 0) log_end_msg 0 ;; 148 1) log_end_msg 1 ;; # Old process is still running 149 *) log_end_msg 1 ;; # Failed to start 150 esac 151 ;; 152 *) 153 # Failed to stop 154 log_end_msg 1 155 ;; 156 esac 157 ;; 158 *) 159 echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload|upgrade}" >&2 160 exit 3 161 ;; 162esac 163 164: 165