Init scripts

    osbolete: on debian jessie 8.0, replace by system.d

    The scripts which start when unix system boot or shutdown. Usefull to start daemon for example.

    Linux Standards Base

    See example :

    Enable

    update-rc.d apache2 enable
    

    Disable

    update-rc.d apache2 disable
    

    Remove

    update-rc.d apache2 remove
    

    Note:

    • You can us -f option if you have some trouble

    Template

    LSB init script skelet

    #!/bin/bash
    ### BEGIN INIT INFO
    # Provides:          SKELET-daemon
    # Required-Start:    $local_fs $remote_fs $network $syslog $named
    # Required-Stop:     $local_fs $remote_fs $network $syslog $named
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Start/stop SKELET daemon
    ### END INIT INFO
    
    # Import lsb functions (log_warning_msg, log_progress_msg, log_end_msg)
    . /lib/lsb/init-functions
    
    NAME=lsb_skelet.sh
    SCRIPTNAME=/etc/init.d/$NAME
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    
    function app_is_running()
    {
    	app=$1
    
    	result=$(ps aux | grep -e '.*'$app'$' -c)
    
    	if [ $result == 0 ]
    	then
    		false
    	else
    		true
    	fi
    }
    
    case $1 in
    	start)
    		log_daemon_msg "Starting" "SKELET"
    
    		#cmd...
    
    		# check cmd has no problem
    		if [ $? == 0 ]
    		then
    			log_end_msg 0
    		else
    			log_end_msg 1
    		fi
    	;;
    	stop)
    		if app_is_running "SKELET"
    		then
    			log_daemon_msg "Shutting down" "SKELET"
    
    			killall -r "^.*SKELET$"
    
    			#cmd...
    
    			# check cmd has no problem
    			if [ $? == 0 ]
    			then
    				log_end_msg 0
    			else
    				log_end_msg 1
    			fi
    		else
    			log_daemon_msg "Doesn't run" "SKELET"
    		fi
    	;;
    	status)
    		if app_is_running "SKELET"
    		then
    			log_daemon_msg "Currently running" "SKELET"
    			log_end_msg 0
    		else
    			log_daemon_msg "Doesn't run" "SKELET"
    			log_end_msg 1
    		fi
    	;;
    
    	*)
    		echo "Usage: $SCRIPTNAME {start|stop|status}" >&2
    		exit 2
    	;;
    esac
    

    Apache

    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides:          apache2
    # Required-Start:    $local_fs $remote_fs $network $syslog $named
    # Required-Stop:     $local_fs $remote_fs $network $syslog $named
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # X-Interactive:     true
    # Short-Description: Start/stop apache2 web server
    ### END INIT INFO
    
    set -e
    
    SCRIPTNAME="${0##*/}"
    SCRIPTNAME="${SCRIPTNAME##[KS][0-9][0-9]}"
    if [ -n "$APACHE_CONFDIR" ] ; then
    	if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
    		DIR_SUFFIX="${APACHE_CONFDIR##/etc/apache2-}"
    	else
    		DIR_SUFFIX=
    	fi
    elif [ "${SCRIPTNAME##apache2-}" != "$SCRIPTNAME" ] ; then
    	DIR_SUFFIX="-${SCRIPTNAME##apache2-}"
    	APACHE_CONFDIR=/etc/apache2$DIR_SUFFIX
    else
    	DIR_SUFFIX=
    	APACHE_CONFDIR=/etc/apache2
    fi
    if [ -z "$APACHE_ENVVARS" ] ; then
    	APACHE_ENVVARS=$APACHE_CONFDIR/envvars
    fi
    export APACHE_CONFDIR APACHE_ENVVARS
    
    ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin"
    if [ "$APACHE_CONFDIR" != /etc/apache2 ] ; then
    	ENV="$ENV APACHE_CONFDIR=$APACHE_CONFDIR"
    fi
    if [ "$APACHE_ENVVARS" != "$APACHE_CONFDIR/envvars" ] ; then
    	ENV="$ENV APACHE_ENVVARS=$APACHE_ENVVARS"
    fi
    
    
    #edit /etc/default/apache2 to change this.
    HTCACHECLEAN_RUN=auto
    HTCACHECLEAN_MODE=daemon
    HTCACHECLEAN_SIZE=300M
    HTCACHECLEAN_DAEMON_INTERVAL=120
    HTCACHECLEAN_PATH=/var/cache/apache2$DIR_SUFFIX/mod_disk_cache
    HTCACHECLEAN_OPTIONS=""
    
    APACHE_HTTPD=$(. $APACHE_ENVVARS && echo $APACHE_HTTPD)
    if [ -z "$APACHE_HTTPD" ] ; then
    	APACHE_HTTPD=/usr/sbin/apache2
    fi
    if [ ! -x $APACHE_HTTPD ] ; then
    	echo "No apache MPM package installed"
    	exit 0
    fi
    
    . /lib/lsb/init-functions
    
    test -f /etc/default/rcS && . /etc/default/rcS
    
    if [ -f /etc/default/apache2$DIR_SUFFIX ] ; then
    	. /etc/default/apache2$DIR_SUFFIX
    elif [ -f /etc/default/apache2 ] ; then
    	. /etc/default/apache2
    fi
    
    APACHE2CTL="$ENV /usr/sbin/apache2ctl"
    HTCACHECLEAN="$ENV /usr/sbin/htcacheclean"
    
    PIDFILE=$(. $APACHE_ENVVARS && echo $APACHE_PID_FILE)
    if [ -z "$PIDFILE" ] ; then
    	echo ERROR: APACHE_PID_FILE needs to be defined in $APACHE_ENVVARS >&2
    	exit 2
    fi
    
    
    check_htcacheclean() {
    	[ "$HTCACHECLEAN_MODE" = "daemon" ] || return 1
    
    	[ "$HTCACHECLEAN_RUN"  = "yes"    ] && return 0
    
    	MODSDIR=$(. $APACHE_ENVVARS && echo $APACHE_MODS_ENABLED)
    	[ "$HTCACHECLEAN_RUN"  = "auto" \
    	  -a -e ${MODSDIR:-$APACHE_CONFDIR/mods-enabled}/disk_cache.load ] && \
    		return 0
    
    	return 1
    }
    
    start_htcacheclean() {
    	if [ ! -d "$HTCACHECLEAN_PATH" ] ; then
    		echo "... directory $HTCACHECLEAN_PATH does not exist!" >&2
    		return 1
    	fi
    	$HTCACHECLEAN $HTCACHECLEAN_OPTIONS -d$HTCACHECLEAN_DAEMON_INTERVAL \
    			-i -p$HTCACHECLEAN_PATH -l$HTCACHECLEAN_SIZE
    }
    
    stop_htcacheclean() {
    	pkill -P 1 -f "htcacheclean.* -p$HTCACHECLEAN_PATH " 2> /dev/null || echo ...not running
    }
    
    pidof_apache() {
    	# if there is actually an apache2 process whose pid is in PIDFILE,
    	# print it and return 0.
    	if [ -e "$PIDFILE" ]; then
    		if pidof apache2 | tr ' ' '\n' | grep -w $(cat $PIDFILE); then
    			return 0
    		fi
    	fi
    	return 1
    }
    
    apache_stop() {
    	if $APACHE2CTL configtest > /dev/null 2>&1; then
    		# if the config is ok than we just stop normaly
                    $APACHE2CTL stop 2>&1 | grep -v 'not running' >&2 || true
    	else
    		# if we are here something is broken and we need to try
    		# to exit as nice and clean as possible
    		PID=$(pidof_apache) || true
    
    		if [ "${PID}" ]; then
    			# in this case it is everything nice and dandy and we kill apache2
    			echo
    			log_warning_msg "The apache2$DIR_SUFFIX configtest failed, so we are trying to kill it manually. This is almost certainly suboptimal, so please make sure your system is working as you'd expect now!"
                            kill $PID
    		elif [ "$(pidof apache2)" ]; then
    			if [ "$VERBOSE" != no ]; then
                                    echo " ... failed!"
    			        echo "You may still have some apache2 processes running.  There are"
     			        echo "processes named 'apache2' which do not match your pid file,"
    			        echo "and in the name of safety, we've left them alone.  Please review"
    			        echo "the situation by hand."
                            fi
                            return 1
    		fi
    	fi
    }
    
    apache_wait_stop() {
    	# running ?
    	PIDTMP=$(pidof_apache) || true
    	if kill -0 "${PIDTMP:-}" 2> /dev/null; then
    	    PID=$PIDTMP
    	fi
    
    	apache_stop
    
    	# wait until really stopped
    	if [ -n "${PID:-}" ]; then
    		i=0
    		while kill -0 "${PID:-}" 2> /dev/null;  do
            		if [ $i = '60' ]; then
            			break;
            	 	else
            			if [ $i = '0' ]; then
                    			echo -n " ... waiting "
            			else
                    	      		echo -n "."
            		 	fi
            			i=$(($i+1))
            			sleep 1
            	      fi
    		 done
    	fi
    }
    
    case $1 in
    	start)
    		log_daemon_msg "Starting web server" "apache2"
    		if $APACHE2CTL start; then
    			if check_htcacheclean ; then
    				log_progress_msg htcacheclean
    				start_htcacheclean || log_end_msg 1
    			fi
                            log_end_msg 0
                    else
                            log_end_msg 1
                    fi
    	;;
    	stop)
    		if check_htcacheclean ; then
    			log_daemon_msg "Stopping web server" "htcacheclean"
    			stop_htcacheclean
    			log_progress_msg "apache2"
    		else
    			log_daemon_msg "Stopping web server" "apache2"
    		fi
    		if apache_wait_stop; then
                            log_end_msg 0
                    else
                            log_end_msg 1
                    fi
    	;;
    	graceful-stop)
    		if check_htcacheclean ; then
    			log_daemon_msg "Stopping web server" "htcacheclean"
    			stop_htcacheclean
    			log_progress_msg "apache2"
    		else
    			log_daemon_msg "Stopping web server" "apache2"
    		fi
    		if $APACHE2CTL graceful-stop; then
                            log_end_msg 0
                    else
                            log_end_msg 1
                    fi
    	;;
    	reload | force-reload | graceful)
                    log_daemon_msg "Reloading web server config"
                    if pidof_apache > /dev/null ; then
                        log_progress_msg "apache2"
                        if ! $APACHE2CTL configtest > /dev/null 2>&1; then
                            log_end_msg 1
                            $APACHE2CTL configtest || true
                            exit 1
                        fi
                        if $APACHE2CTL graceful $2 ; then
                            log_end_msg 0
                        else
                            log_end_msg 1
                        fi
                    else
                        log_progress_msg "apache2 not running"
                        log_end_msg 0
                    fi
    	;;
    	restart)
    		if ! $APACHE2CTL configtest > /dev/null 2>&1; then
    		    $APACHE2CTL configtest || true
    		    log_end_msg 1
    		    exit 1
    		fi
    		if check_htcacheclean ; then
    			log_daemon_msg "Restarting web server" "htcacheclean"
    			stop_htcacheclean
    			log_progress_msg apache2
    		else
    			log_daemon_msg "Restarting web server" "apache2"
    		fi
    		PID=$(pidof_apache) || true
    		if ! apache_wait_stop; then
                            log_end_msg 1 || true
                    fi
    		if $APACHE2CTL start; then
    			if check_htcacheclean ; then
    				start_htcacheclean || log_end_msg 1
    			fi
                            log_end_msg 0
                    else
                            log_end_msg 1
                    fi
    	;;
    	start-htcacheclean)
    		log_daemon_msg "Starting htcacheclean"
    		start_htcacheclean || log_end_msg 1
    		log_end_msg 0
    	;;
    	stop-htcacheclean)
    		log_daemon_msg "Stopping htcacheclean"
    			stop_htcacheclean
    			log_end_msg 0
    	;;
    	status)
    		PID=$(pidof_apache) || true
    		if [ -n "$PID" ]; then
    			echo "Apache2$DIR_SUFFIX is running (pid $PID)."
    			exit 0
    		else
    			echo "Apache2$DIR_SUFFIX is NOT running."
    			if [ -e "$PIDFILE" ]; then
    				exit 1
    			else
    				exit 3
    			fi
    		fi
    	;;
    
    	*)
    		log_success_msg "Usage: /etc/init.d/apache2$DIR_SUFFIX {start|stop|graceful-stop|restart|reload|force-reload|start-htcacheclean|stop-htcacheclean|status}"
    		exit 1
    	;;
    esac