ipactl was a quickie thing I threw together at the end of v1 and it
wasn't all too bright. This tries to fix things up and work around some
init script issues.
The init scripts returns a 1 both if the service isn't running and if it
is not running but there is a pid file lying around. I check for this
and make a new return value, 4, to represent stopped.
Using this I can better tell what the current state of affairs is and
just stop/start those services that are actually running.
I added named to the list of services we track.
rob
>From 0e161ef6ef08322472dce25da9128bd234b43303 Mon Sep 17 00:00:00 2001
From: Rob Crittenden
Date: Tue, 31 Aug 2010 17:28:41 -0400
Subject: [PATCH] Make ipactl a lot smarter and have it manage named as well.
ticket 138
---
install/tools/ipactl | 97 -
1 files changed, 71 insertions(+), 26 deletions(-)
diff --git a/install/tools/ipactl b/install/tools/ipactl
index e7544cf..fa86511 100755
--- a/install/tools/ipactl
+++ b/install/tools/ipactl
@@ -21,40 +21,85 @@
# proper order
#
-function start() {
-/sbin/service dirsrv start
-/sbin/service ntpd start
-/sbin/service krb5kdc start
-/sbin/service ipa_kpasswd start
-/sbin/service httpd start
+# Set IFS so we can do space-embedded lists of services
+IFS=";"
+
+# start and stop are basically a reverse of each other
+services_stop="ipa_kpasswd;httpd;krb5kdc;dirsrv;ntpd;named;pki-cad pki-ca"
+services_start="dirsrv;ntpd;named;krb5kdc;ipa_kpasswd;httpd;pki-cad pki-ca"
+
+function is_running() {
+# $1 = service to check on
+# $2 = optional instance to check on, for dirsrv and pki-cad
-if [ -e /var/lib/pki-ca ]; then
-/sbin/service pki-cad start
+# Returns
+# 0 - running
+# 1 - pid but dead service
+# 2 - dead but locked subsys
+# 3 - stopped
+# 4 - no such service
+if [ "$#" = 2 ] ; then
+/sbin/service $1 status $2 > /dev/null 2>&1
+else
+out=`/sbin/service $1 status 2>&1`
fi
+case "$?" in
+0)
+return 0;;
+1)
+x=`echo $out | grep -c exists`
+if [ $x -eq 1 ] ; then
+return 1
+else
+return 4
+fi
+;;
+2)
+return 2;;
+3)
+return 3;;
+esac
}
-function stop() {
-/sbin/service ipa_kpasswd stop
-/sbin/service httpd stop
-/sbin/service krb5kdc stop
-/sbin/service dirsrv stop
-/sbin/service ntpd stop
+function start() {
+for service in $services_start ; do
+is_running $service
+case "$?" in
+0) # running
+;;
+4) # no such service
+;;
+*) # otherwise not running
+/sbin/service $service start
+;;
+esac
+done
+}
-if [ -e /var/lib/pki-ca ]; then
-/sbin/service pki-cad stop
-fi
+function stop() {
+for service in $services_stop ; do
+is_running $service
+case "$?" in
+0) # running
+/sbin/service $service stop
+;;
+*) # otherwise not running or doesn't exist
+;;
+esac
+done
}
function status() {
-/sbin/service ipa_kpasswd status
-/sbin/service httpd status
-/sbin/service krb5kdc status
-/sbin/service dirsrv status
-/sbin/service ntpd status
-
-if [ -e /var/lib/pki-ca ]; then
-/sbin/service pki-cad status
-fi
+for service in $services_start ; do
+is_running $service
+case "$?" in
+4)
+;;
+*)
+/sbin/service $service status
+;;
+esac
+done
}
case "$1" in
--
1.7.2.1
___
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel