3f1cc17c90
ZED depends on /var. When /var is a separate dataset, it must be mounted before starting ZED. This change moves the zfs-zed service from starting first, to starting after zfs-mount, but before zfs-share. As discussed in issue #3513, ZED does not need to start first in order to consume events made during the zfs-import and zfs-mount services. The events will be queued and can be handled later in the boot process. ZED may, however, handle sharing in the future, so it should be started before the zfs-share service. This commit also stops the zfs-import service from writing temp files to /var/tmp on shutdown and it corrects the return code for the OpenRC service. Other OpenRC-specific changes noted in issue #3513 were reitereated in issue #3715 and committed in da619f3. Signed-off-by: James Lee <jlee@thestaticvoid.com> Signed-off-by: Richard Yao <ryao@gentoo.org> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #3513
133 lines
2.7 KiB
Plaintext
Executable File
133 lines
2.7 KiB
Plaintext
Executable File
#!@SHELL@
|
|
#
|
|
# zfs-zed
|
|
#
|
|
# chkconfig: 2345 29 99
|
|
# description: This script will start and stop the ZFS Event Daemon.
|
|
# probe: true
|
|
#
|
|
### BEGIN INIT INFO
|
|
# Provides: zfs-zed
|
|
# Required-Start: zfs-mount
|
|
# Required-Stop: zfs-mount
|
|
# Default-Start: 2 3 4 5
|
|
# Default-Stop: 0 1 6
|
|
# X-Stop-After: zfs-share
|
|
# Short-Description: ZFS Event Daemon
|
|
# Description: zed monitors ZFS events. When a zevent is posted, zed
|
|
# will run any scripts that have been enabled for the
|
|
# corresponding zevent class.
|
|
### END INIT INFO
|
|
#
|
|
# Released under the 2-clause BSD license.
|
|
#
|
|
# The original script that acted as a template for this script came from
|
|
# the Debian GNU/Linux kFreeBSD ZFS packages (which did not include a
|
|
# licensing stansa) in the commit dated Mar 24, 2011:
|
|
# https://github.com/zfsonlinux/pkg-zfs/commit/80a3ae582b59c0250d7912ba794dca9e669e605a
|
|
|
|
# Source the common init script
|
|
. @sysconfdir@/zfs/zfs-functions
|
|
|
|
ZED_NAME="zed"
|
|
ZED_PIDFILE="@runstatedir@/$ZED_NAME.pid"
|
|
|
|
# Exit if the package is not installed
|
|
[ -x "$ZED" ] || exit 0
|
|
|
|
# ----------------------------------------------------
|
|
|
|
do_depend()
|
|
{
|
|
after zfs-mount localmount
|
|
}
|
|
|
|
do_start()
|
|
{
|
|
check_module_loaded "zfs" || exit 0
|
|
|
|
ZED_ARGS="$ZED_ARGS -p $ZED_PIDFILE"
|
|
|
|
zfs_action "Starting ZFS Event Daemon" zfs_daemon_start \
|
|
"$ZED_PIDFILE" "$ZED" "$ZED_ARGS"
|
|
return "$?"
|
|
}
|
|
|
|
do_stop()
|
|
{
|
|
local pools RET
|
|
check_module_loaded "zfs" || exit 0
|
|
|
|
zfs_action "Stopping ZFS Event Daemon" zfs_daemon_stop \
|
|
"$ZED_PIDFILE" "$ZED" "$ZED_NAME"
|
|
if [ "$?" -eq "0" ]
|
|
then
|
|
# Let's see if we have any pools imported
|
|
pools=$("$ZPOOL" list -H -oname)
|
|
if [ -z "$pools" ]
|
|
then
|
|
# No pools imported, it is/should be safe/possible to
|
|
# unload modules.
|
|
zfs_action "Unloading modules" rmmod zfs zunicode \
|
|
zavl zcommon znvpair spl
|
|
return "$?"
|
|
fi
|
|
else
|
|
return "$?"
|
|
fi
|
|
}
|
|
|
|
do_status()
|
|
{
|
|
check_module_loaded "zfs" || exit 0
|
|
|
|
zfs_daemon_status "$ZED_PIDFILE" "$ZED" "$ZED_NAME"
|
|
return "$?"
|
|
}
|
|
|
|
do_reload()
|
|
{
|
|
check_module_loaded "zfs" || exit 0
|
|
|
|
zfs_action "Reloading ZFS Event Daemon" zfs_daemon_reload \
|
|
"$ZED_PIDFILE" "$ZED_NAME"
|
|
return "$?"
|
|
}
|
|
|
|
# ----------------------------------------------------
|
|
|
|
if [ ! -e /etc/gentoo-release ]; then
|
|
case "$1" in
|
|
start)
|
|
do_start
|
|
;;
|
|
stop)
|
|
do_stop
|
|
;;
|
|
status)
|
|
do_status
|
|
;;
|
|
reload|force-reload)
|
|
do_reload
|
|
;;
|
|
restart)
|
|
do_stop
|
|
do_start
|
|
;;
|
|
*)
|
|
[ -n "$1" ] && echo "Error: Unknown command $1."
|
|
echo "Usage: $0 {start|stop|status|reload|restart}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
exit $?
|
|
else
|
|
# Create wrapper functions since Gentoo don't use the case part.
|
|
depend() { do_depend; }
|
|
start() { do_start; }
|
|
stop() { do_stop; }
|
|
status() { do_status; }
|
|
reload() { do_reload; }
|
|
fi
|