[arch-general] [PATCH 1/2] Add daemon-functions to the initscripts package.
Victor Lowther
victor.lowther at gmail.com
Sun Jul 11 11:12:09 EDT 2010
This file encapsulates most common rc.d daemon script idioms, and should allow
most of then to be about 6 lines long (not including whitespace)
Using it will require some modifications to the /etc/conf.d files, as
the generic functions expect all daemon options to be in $OPTS
Among other things, this will close feature request# 18654
It was written on top of my bashification patch series, but is mostly independent
of it.
---
daemon-functions | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
functions | 2 +
2 files changed, 74 insertions(+), 0 deletions(-)
diff --git a/daemon-functions b/daemon-functions
new file mode 100755
index 0000000..5f7660a
--- /dev/null
+++ b/daemon-functions
@@ -0,0 +1,72 @@
+#!/bin/bash
+# This file contains helper functions for initscripts in /etc/rc.d.
+# I am keeping it seperate from the main /etc/rc.d/functions for now.
+# Using this file makes most /etc/rc.d files as simple as
+# #!/bin/bash
+# DAEMON=/path/to/daemon
+# case $1 in
+# start|stop|restart|status) $1;;
+# *) usage;;
+# esac
+
+shopt -s extglob
+
+# first, source our usual files.
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+# Next, declare some useful helper functions
+have_daemon() {
+ local f
+ [[ $DAEMON && -x $DAEMON ]] || return 1
+ [[ $DAEMONNAME ]] || DAEMONNAME="${0##*/}"
+ PIDS=($(pidof -o %PPID "$DAEMON"))
+ [[ $DAEMONCONF ]] || \
+ for f in "$DAEMONNAME" "$DAEMONNAME.conf"; do
+ [[ -f /etc/conf.d/$f ]] || continue
+ DAEMONCONF="/etc/conf.d/$f"
+ break
+ done
+ return 0
+}
+
+start() {
+ have_daemon || exit 1
+ [[ -f $DAEMONCONF ]] && . "$DAEMONCONF"
+ stat_busy "Starting $DAEMONNAME"
+ if [[ ! $PIDS ]] && "$DAEMON" $OPTS >/dev/null 2>&1; then
+ add_daemon "$DAEMONNAME"
+ stat_done
+ else
+ stat_fail
+ fi
+}
+
+stop() {
+ have_daemon || exit 1
+ stat_busy "Stopping $DAEMONNAME"
+ if [[ $PIDS ]] && kill "${PIDS[@]}" >/dev/null 2>&1; then
+ rm_daemon "$DAEMONNAME"
+ stat_done
+ else
+ stat_fail
+ fi
+}
+
+restart() {
+ have_daemon || exit 1
+ stat_busy "Restarting $DAEMONNAME"
+ "$0" stop
+ sleep 1
+ "$0" start
+}
+
+status() {
+ have_daemon || exit 1
+ stat_busy "Checking status of $DAEMONNAME"
+ ck_status "$DAEMONNAME"
+}
+
+usage() {
+ echo "Usage: $0 {start|stop|restart|status}"
+}
\ No newline at end of file
diff --git a/functions b/functions
index 5e9a3b5..83f8fb7 100644
--- a/functions
+++ b/functions
@@ -197,8 +197,10 @@ status_stopped() {
ck_status() {
if ! ck_daemon "$1"; then
status_started
+ return 0
else
status_stopped
+ return 1
fi
}
--
1.7.1.1
More information about the arch-general
mailing list