summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hosts/jenkins/etc/init.d/jenkins258
1 files changed, 258 insertions, 0 deletions
diff --git a/hosts/jenkins/etc/init.d/jenkins b/hosts/jenkins/etc/init.d/jenkins
new file mode 100644
index 00000000..ccb33d5d
--- /dev/null
+++ b/hosts/jenkins/etc/init.d/jenkins
@@ -0,0 +1,258 @@
+#!/bin/bash
+# /etc/init.d/jenkins
+# debian-compatible jenkins startup script.
+# Amelia A Lewis <alewis@ibco.com>
+#
+### BEGIN INIT INFO
+# Provides: jenkins
+# Required-Start: $remote_fs $syslog $network
+# Required-Stop: $remote_fs $syslog $network
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Start Jenkins at boot time
+# Description: Controls Jenkins Continuous Integration Server
+### END INIT INFO
+
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+
+DESC="Jenkins Continuous Integration Server"
+NAME=jenkins
+SCRIPTNAME=/etc/init.d/$NAME
+
+[ -r /etc/default/$NAME ] && . /etc/default/$NAME
+
+#DAEMON=$JENKINS_SH
+DAEMON=/usr/bin/daemon
+DAEMON_ARGS="--name=$NAME --inherit --env=JENKINS_HOME=$JENKINS_HOME --output=$JENKINS_LOG --pidfile=$PIDFILE"
+
+if [ -n "$UMASK" ]; then
+ DAEMON_ARGS="$DAEMON_ARGS --umask=$UMASK"
+fi
+
+SU=/bin/su
+
+# Exit if the package is not installed
+if [ ! -x "$DAEMON" ]; then
+ echo "daemon package not installed" >&2
+ exit 1
+fi
+
+# Exit if not supposed to run standalone
+if [ "$RUN_STANDALONE" = "false" ]; then
+ echo "Not configured to run standalone" >&2
+ exit 1
+fi
+
+# load environments
+if [ -r /etc/default/locale ]; then
+ . /etc/default/locale
+ export LANG LANGUAGE
+elif [ -r /etc/environment ]; then
+ . /etc/environment
+ export LANG LANGUAGE
+fi
+
+# 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
+
+# Make sure we run as root, since setting the max open files through
+# ulimit requires root access
+if [ `id -u` -ne 0 ]; then
+ echo "The $NAME init script can only be run as root"
+ exit 1
+fi
+
+
+check_tcp_port() {
+ local service=$1
+ local assigned=$2
+ local default=$3
+
+ if [ -n "$assigned" ]; then
+ port=$assigned
+ else
+ port=$default
+ fi
+
+ count=`netstat --listen --numeric-ports | grep \:$port[[:space:]] | grep -c . `
+
+ if [ $count -ne 0 ]; then
+ echo "The selected $service port ($port) seems to be in use by another program "
+ echo "Please select another port to use for $NAME"
+ return 1
+ fi
+}
+
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+ # the default location is /var/run/jenkins/jenkins.pid but the parent directory needs to be created
+ mkdir `dirname $PIDFILE` > /dev/null 2>&1 || true
+ chown $JENKINS_USER `dirname $PIDFILE`
+ # Return
+ # 0 if daemon has been started
+ # 1 if daemon was already running
+ # 2 if daemon could not be started
+ $DAEMON $DAEMON_ARGS --running && return 1
+
+ # Verify that the jenkins port is not already in use, winstone does not exit
+ # even for BindException
+ check_tcp_port "http" "$HTTP_PORT" "8080" || return 2
+
+ # If the var MAXOPENFILES is enabled in /etc/default/jenkins then set the max open files to the
+ # proper value
+ if [ -n "$MAXOPENFILES" ]; then
+ [ "$VERBOSE" != no ] && echo Setting up max open files limit to $MAXOPENFILES
+ ulimit -n $MAXOPENFILES
+ fi
+
+ # notify of explicit umask
+ if [ -n "$UMASK" ]; then
+ [ "$VERBOSE" != no ] && echo Setting umask to $UMASK
+ fi
+
+ # --user in daemon doesn't prepare environment variables like HOME, USER, LOGNAME or USERNAME,
+ # so we let su do so for us now
+ $SU -l $JENKINS_USER --shell=/bin/bash -c "$DAEMON $DAEMON_ARGS -- $JAVA $JAVA_ARGS -jar $JENKINS_WAR $JENKINS_ARGS" || return 2
+}
+
+
+#
+# Verify that all jenkins processes have been shutdown
+# and if not, then do killall for them
+#
+get_running()
+{
+ return `ps -U $JENKINS_USER --no-headers -f | egrep -e '(java|daemon)' | grep -c . `
+}
+
+force_stop()
+{
+ get_running
+ if [ $? -ne 0 ]; then
+ killall -u $JENKINS_USER java daemon || return 3
+ fi
+}
+
+# Get the status of the daemon process
+get_daemon_status()
+{
+ $DAEMON $DAEMON_ARGS --running || return 1
+}
+
+
+#
+# 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
+ get_daemon_status
+ case "$?" in
+ 0)
+ $DAEMON $DAEMON_ARGS --stop || return 2
+ # wait for the process to really terminate
+ for n in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
+ sleep 1
+ $DAEMON $DAEMON_ARGS --running || break
+ done
+ if get_daemon_status; then
+ force_stop || return 3
+ fi
+ ;;
+ *)
+ force_stop || return 3
+ ;;
+ esac
+
+ # Many daemons don't delete their pidfiles when they exit.
+ rm -f $PIDFILE
+ return 0
+}
+
+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
+ ;;
+ 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
+ ;;
+ status)
+ get_daemon_status
+ case "$?" in
+ 0)
+ echo "$DESC is running with the pid `cat $PIDFILE`"
+ rc=0
+ ;;
+ *)
+ get_running
+ procs=$?
+ if [ $procs -eq 0 ]; then
+ echo -n "$DESC is not running"
+ if [ -f $PIDFILE ]; then
+ echo ", but the pidfile ($PIDFILE) still exists"
+ rc=1
+ else
+ echo
+ rc=3
+ fi
+
+ else
+ echo "$procs instances of jenkins are running at the moment"
+ echo "but the pidfile $PIDFILE is missing"
+ rc=0
+ fi
+
+ exit $rc
+ ;;
+ esac
+ ;;
+ *)
+ echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
+ exit 3
+ ;;
+esac
+
+exit 0