diff options
-rw-r--r-- | hosts/jenkins/etc/init.d/jenkins | 258 |
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 |