HTCondor Project List Archives



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Condor-devel] LSB-ish init script for Condor



I would like to add an LSB-like (maybe not completely LSB compliant) init script to Condor 7.0 before 7.0.1 comes out. Attached is a patch against Condor 7.0 that contains the script. It is added as src/condor_examples/condor.init with a slight modification to src/condor_examples/Imakefile so it will be installed in etc/examples/.

This isn't really a "new feature" just a new example file. So I hope it can be added to the 7.0 stable series instead of the 7.1 development series.

Thoughts?

Best,


matt


diff --git a/src/condor_examples/Imakefile b/src/condor_examples/Imakefile
index 34c85cc..b7ced63 100644
--- a/src/condor_examples/Imakefile
+++ b/src/condor_examples/Imakefile
@@ -9,7 +9,8 @@ FILES = README condor_config.local.central.manager \
 	condor_vmgahp_config.xen \
 	condor_vmgahp_config.vmware \
 	lamscript \
-	mp1script
+	mp1script \
+	condor.init
 
 all::
 
diff --git a/src/condor_examples/condor.init b/src/condor_examples/condor.init
new file mode 100644
index 0000000..1d25a33
--- /dev/null
+++ b/src/condor_examples/condor.init
@@ -0,0 +1,174 @@
+#!/bin/bash
+#
+# condor	This script allows for starting and stopping Condor.
+#
+# chkconfig: - 90 10
+# description: Condor is a high throughput computing batch processing
+# 	       platform.
+# processname: condor_master
+# config: /etc/condor/condor_config
+# pidfile: /var/lib/condor/condor_master.pid
+
+### BEGIN INIT INFO
+# Provides: condor
+# Required-Start: $local_fs $network
+# Required-Stop: $local_fs $network
+# Short-Description: start and stop Condor
+# Description: Condor HTC computing platform
+### END INIT INFO
+
+# The program being managed
+prog=condor_master
+
+lockfile=/var/lock/subsys/$prog
+pidfile=/var/lib/condor/$prog.pid
+
+# Source function library
+. /etc/init.d/functions
+
+# Source networking configuration
+[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network
+
+# Source Condor configuration
+[ -f /etc/sysconfig/condor ] && . /etc/sysconfig/condor
+
+# Check that networking is up
+[ "${NETWORKING}" = "no" ] && exit 1
+
+
+start() {
+    echo -n $"Starting Condor daemons: "
+    daemon --pidfile $pidfile --check $prog $prog -pidfile $pidfile
+    RETVAL=$?
+    echo
+    [ $RETVAL -eq 0 ] && touch $lockfile
+    return $RETVAL
+}
+
+stop() {
+    echo -n $"Stopping Condor daemons: "
+    killproc -p $pidfile $prog
+    RETVAL=$?
+    echo
+    [ $RETVAL -eq 0 ] && rm -f $lockfile
+    return $RETVAL
+}
+
+reload() {
+    echo -n $"Reloading Condor daemons: "
+    condor_reconfig # Always returns 0?
+    RETVAL=$?
+    echo
+    return $RETVAL
+}
+
+#
+# Determine if a process is running only by looking in a pidfile.
+# There is no use of pidof, which can find processes that are not
+# started by this script.
+#
+# ASSUMPTION: The pidfile will exist if the process does, see false
+# negative warning.
+#
+# WARNING: A false positive is possible if the process that dropped
+# the pid file has crashed and the pid has been recycled. A false
+# negative is possible if the process has not yet dropped the pidfile,
+# or it contains the incorrect pid.
+#
+# Usage: pid_status <pidfile> <lockfile>
+# Result: 0 = pid exists
+#         1 = pid does not exist, but pidfile does
+#         2 = pid does not exist, but lockfile does
+#         3 = pidfile does not exist, thus pid does not exist
+#         4 = status unknown
+#
+pid_status() {
+    if [ -f $1 ]; then
+        # this can fail if we're not privileged
+        pid=`cat $1` &>/dev/null
+        if [ $? -ne 0 -o -z "$pid" ]; then
+            return 4
+        fi
+
+        ps $pid &>/dev/null
+        if [ $? -ne 0 ]; then
+	    if [ -e $2 ]; then
+		return 2
+	    fi
+
+            return 1
+        fi
+
+        return 0
+    fi
+
+    return 3
+}
+
+
+pid_status $pidfile $lockfile
+running=$?
+
+if [ "$1" != "status" ]; then
+    # Report that $prog does not exist, or is not executable
+    if [ ! -x /usr/sbin/$prog ]; then
+	echo $"$0: error: program not installed"
+	exit 5
+    fi
+
+    [ $running -eq 4 ] && echo $"$0: error: insufficient privileges" && exit 7
+fi
+
+case "$1" in
+    start)
+	[ $running -eq 0 ] && exit 0
+	start
+	RETVAL=$?
+	;;
+    stop)
+	[ $running -eq 0 ] || exit 0
+	stop
+	RETVAL=$?
+	;;
+    restart)
+	[ $running -eq 0 ] && stop
+	start
+	RETVAL=$?
+	;;
+    try-restart)
+	[ $running -eq 0 ] || exit 0
+	stop
+	start
+	RETVAL=$?
+	;;
+    reload|force-reload)
+	if [ $running -ne 0 ]; then
+	    echo $"$0: error: $prog is not running"
+	    exit 7
+	fi
+	reload
+	RETVAL=$?
+	;;
+    status)
+	if [ $running -ne 0 ]; then
+	    case "$running" in
+		1) echo $"$prog dead but pid file exists" ;;
+		2) echo $"$prog dead but subsys locked" ;;
+		3) echo $"$prog is stopped" ;;
+		4) echo $"$prog status is unknown" ;;
+	    esac
+
+	    exit $running
+	fi
+
+	# WARNING: status uses pidof and may find more pids than it
+	# should.
+	status -p $pidfile $prog
+	RETVAL=$?
+	;;
+    *)
+	echo $"Usage: $0 {start|stop|restart|try-restart|reload|force-reload|status}"
+	RETVAL=2
+esac
+
+exit $RETVAL