summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Ruppert <idl0r@gentoo.org>2012-09-22 16:57:46 +0200
committerChristian Ruppert <idl0r@gentoo.org>2012-09-22 16:57:46 +0200
commit0406c6085bb25ace04c7880f860219ebfc67a16f (patch)
treed143eed140286b3793446a31a181c9053e812f1c
parent0a132cdca508db86a62452dec081b316db880485 (diff)
downloadopenrc-0406c6085bb25ace04c7880f860219ebfc67a16f.tar.gz
openrc-0406c6085bb25ace04c7880f860219ebfc67a16f.tar.bz2
openrc-0406c6085bb25ace04c7880f860219ebfc67a16f.tar.xz
Add restart_pre/restart_post support, also document RC_CMD
-rw-r--r--man/runscript.88
-rw-r--r--sh/runscript.sh.in22
2 files changed, 30 insertions, 0 deletions
diff --git a/man/runscript.8 b/man/runscript.8
index b87f8ef..d823e33 100644
--- a/man/runscript.8
+++ b/man/runscript.8
@@ -357,6 +357,9 @@ In a Gentoo Prefix installation, this variable contains the prefix
offset. Otherwise it is undefined.
.It Va RC_UNAME
The result of `uname -s`.
+.It Va RC_CMD
+Name of the command like start, stop, restart, ...
+RC_CMD is one way to determine whether it's a restart or normal start/stop.
.El
.Sh FILES
.Pp
@@ -444,6 +447,11 @@ depend()
need ${_need}
}
+restart_pre() {
+ # Verify a config and abort the restart in case it's not valid
+ ...
+}
+
start_pre()
{
# Ensure that our dirs are correct
diff --git a/sh/runscript.sh.in b/sh/runscript.sh.in
index 6ad2ded..3b9a72d 100644
--- a/sh/runscript.sh.in
+++ b/sh/runscript.sh.in
@@ -285,15 +285,37 @@ while [ -n "$1" ]; do
case $1 in
start|stop|status) verify_boot;;
esac
+
+ # FIXME: We may want to skip the start/stop _pre functions later
+ # restart_pre
+ if [ "${RC_CMD}" = "restart" ]; then
+ if [ "${1}" = "stop" -a "$(command -v "restart_pre")" = "restart_pre" ]; then
+ restart_pre || exit $?
+ fi
+ fi
+
+ # Execute _pre functions
if [ "$(command -v "$1_pre")" = "$1_pre" ]
then
"$1"_pre || exit $?
fi
+
+ # Execute the actual command/function, start, stop, ...
"$1" || exit $?
+
+ # restart_post
+ if [ "${RC_CMD}" = "restart" ]; then
+ if [ "${1}" = "start" -a "$(command -v "restart_post")" = "restart_post" ]; then
+ restart_post || exit $?
+ fi
+ fi
+
+ # Execute the _post functions
if [ "$(command -v "$1_post")" = "$1_post" ]
then
"$1"_post || exit $?
fi
+
shift
continue 2
else