Created
June 19, 2014 06:44
-
-
Save retrohacker/67e10d8de401fdbf1802 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /bin/sh | |
### BEGIN INIT INFO | |
# Provides: helloInit | |
# Required-Start: $remote_fs $syslog $network $portmap $time $localfs $named | |
# Required-Stop: $remote_fs $syslog $network $portmap $time $localfs $named | |
# Default-Start: 2 3 4 5 | |
# Default-Stop: 0 1 6 | |
# Short-Description: A simple webserver demonstrating a node.js init script | |
# Description: This shows the best way to construct a node.js init script | |
# It implements the best practices described in | |
# LSB 3.1 Section 20: System Initialization | |
### END INIT INFO | |
# Author: William Blankenship <[email protected]> | |
# | |
# Do NOT "set -e" | |
# Keep lines under 80 characters in output! | |
# PATH should be wherever node install --global puts stuff | |
PATH=/sbin:/usr/sbin:/bin:/usr/bin | |
DESC="Incredibly Awesome Node.js WebServer" | |
NAME=helloinit | |
DAEMON=/usr/bin/$NAME | |
DAEMON_ARGS="--port 8080" | |
PIDFILE=/var/run/$NAME.pid | |
SCRIPTNAME=/etc/init.d/$NAME | |
KILL=10 #When stopping a process, go from TERM to KILL after $KILL seconds | |
FAIL=20 #When stopping a process, fail after $FAIL seconds | |
# 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.2-14) to ensure that this file is present | |
# and status_of_proc is working. | |
. /lib/lsb/init-functions | |
# | |
# Function that starts the daemon/service | |
# | |
do_start() | |
{ | |
# Return | |
# 0 if daemon has been started | |
# 1 if daemon was already running | |
# 2 if daemon could not be started | |
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ | |
|| return 1 | |
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ | |
$DAEMON_ARGS \ | |
|| 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. | |
return 0 | |
} | |
# | |
# 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 | |
PID="$(pgrep -f '/usr/bin/helloinit')" | |
if [ $? -ne 0 ]; then | |
return 1 | |
fi | |
KILLCOUNT=0 | |
kill $PID > /dev/null 2>&1 | |
while [ $? -lt 1 ]; do | |
if [ $KILLCOUNT -ge $FAIL ]; then | |
return 2 #Could not kill process... | |
fi | |
sleep 1 | |
KILLCOUNT=$((KILLCOUNT + 1)) | |
if [ $KILLCOUNT -lt $KILL ]; then | |
kill $PID > /dev/null 2>&1 | |
else | |
#Could not term process... | |
kill -SIGKILL $PID > /dev/null 2>&1 | |
fi | |
done | |
return 0 | |
} | |
do_status() | |
{ | |
# Return | |
# 0 program is running or service is OK | |
# 1 program is dead and /var/run pid file exists | |
# 2 program is dead and /var/lock lock file exists | |
# 3 program is not running | |
# 4 program or service status is unknown | |
PID="$(pgrep -f '/usr/bin/helloinit')" | |
if [ $PID -ne 0 ]; then | |
log_success_msg "$NAME is running" | |
return 0 | |
else | |
log_failure_msg "$NAME has stopped" | |
return 3 | |
fi | |
} | |
case "$1" in | |
start) | |
log_daemon_msg "Starting $DESC" "$NAME" | |
do_start | |
case "$?" in | |
0|1) log_end_msg 0 ;; | |
2) log_end_msg 1 ;; | |
esac | |
;; | |
stop) | |
log_daemon_msg "Stopping $DESC" "$NAME" | |
do_stop | |
case "$?" in | |
0|1) log_end_msg 0 ;; | |
2) log_end_msg 1 ;; | |
esac | |
;; | |
status) | |
do_status | |
exit $? | |
;; | |
restart|force-reload) | |
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|status|restart}" >&2 | |
exit 3 | |
;; | |
esac | |
: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment