xref: /freebsd/sys/contrib/openzfs/etc/init.d/zfs-zed.in (revision e92ffd9b626833ebdbf2742c8ffddc6cd94b963e)
1eda14cbcSMatt Macy#!@DEFAULT_INIT_SHELL@
2*e92ffd9bSMartin Matuska# shellcheck disable=SC2154
3eda14cbcSMatt Macy#
4eda14cbcSMatt Macy# zfs-zed
5eda14cbcSMatt Macy#
6eda14cbcSMatt Macy# chkconfig:    2345 29 99
7eda14cbcSMatt Macy# description:  This script will start and stop the ZFS Event Daemon.
8eda14cbcSMatt Macy# probe: true
9eda14cbcSMatt Macy#
10eda14cbcSMatt Macy### BEGIN INIT INFO
11eda14cbcSMatt Macy# Provides:          zfs-zed
12eda14cbcSMatt Macy# Required-Start:    zfs-mount
13eda14cbcSMatt Macy# Required-Stop:     zfs-mount
14eda14cbcSMatt Macy# Default-Start:     2 3 4 5
15eda14cbcSMatt Macy# Default-Stop:      0 1 6
16eda14cbcSMatt Macy# X-Stop-After:      zfs-share
17eda14cbcSMatt Macy# Short-Description: ZFS Event Daemon
18eda14cbcSMatt Macy# Description:       zed monitors ZFS events. When a zevent is posted, zed
19eda14cbcSMatt Macy#                    will run any scripts that have been enabled for the
20eda14cbcSMatt Macy#                    corresponding zevent class.
21eda14cbcSMatt Macy### END INIT INFO
22eda14cbcSMatt Macy#
23eda14cbcSMatt Macy# Released under the 2-clause BSD license.
24eda14cbcSMatt Macy#
2516038816SMartin Matuska# This script is based on debian/zfsutils.zfs.init from the
2616038816SMartin Matuska# Debian GNU/kFreeBSD zfsutils 8.1-3 package, written by Aurelien Jarno.
27eda14cbcSMatt Macy
28eda14cbcSMatt Macy# Source the common init script
29eda14cbcSMatt Macy. @sysconfdir@/zfs/zfs-functions
30eda14cbcSMatt Macy
31eda14cbcSMatt MacyZED_NAME="zed"
32eda14cbcSMatt MacyZED_PIDFILE="@runstatedir@/$ZED_NAME.pid"
33eda14cbcSMatt Macy
3416038816SMartin Matuska# shellcheck disable=SC2034
35eda14cbcSMatt Macyextra_started_commands="reload"
36eda14cbcSMatt Macy
37eda14cbcSMatt Macy# Exit if the package is not installed
38eda14cbcSMatt Macy[ -x "$ZED" ] || exit 0
39eda14cbcSMatt Macy
40eda14cbcSMatt Macy# ----------------------------------------------------
41eda14cbcSMatt Macy
42eda14cbcSMatt Macydo_depend()
43eda14cbcSMatt Macy{
44eda14cbcSMatt Macy	after zfs-mount localmount
45eda14cbcSMatt Macy}
46eda14cbcSMatt Macy
47eda14cbcSMatt Macydo_start()
48eda14cbcSMatt Macy{
49eda14cbcSMatt Macy	check_module_loaded "zfs" || exit 0
50eda14cbcSMatt Macy
51eda14cbcSMatt Macy	ZED_ARGS="$ZED_ARGS -p $ZED_PIDFILE"
52eda14cbcSMatt Macy
53eda14cbcSMatt Macy	zfs_action "Starting ZFS Event Daemon" zfs_daemon_start \
54eda14cbcSMatt Macy	    "$ZED_PIDFILE" "$ZED" "$ZED_ARGS"
55eda14cbcSMatt Macy	return "$?"
56eda14cbcSMatt Macy}
57eda14cbcSMatt Macy
58eda14cbcSMatt Macydo_stop()
59eda14cbcSMatt Macy{
6016038816SMartin Matuska	local pools
61eda14cbcSMatt Macy	check_module_loaded "zfs" || exit 0
62eda14cbcSMatt Macy
63eda14cbcSMatt Macy	zfs_action "Stopping ZFS Event Daemon" zfs_daemon_stop \
6416038816SMartin Matuska	   "$ZED_PIDFILE" "$ZED" "$ZED_NAME" || return "$?"
6516038816SMartin Matuska
66eda14cbcSMatt Macy	# Let's see if we have any pools imported
67eda14cbcSMatt Macy	pools=$("$ZPOOL" list -H -oname)
68eda14cbcSMatt Macy	if [ -z "$pools" ]
69eda14cbcSMatt Macy	then
70eda14cbcSMatt Macy		# No pools imported, it is/should be safe/possible to
71eda14cbcSMatt Macy		# unload modules.
72eda14cbcSMatt Macy		zfs_action "Unloading modules" rmmod zfs zunicode \
73eda14cbcSMatt Macy		    zavl zcommon znvpair zlua spl
74eda14cbcSMatt Macy		return "$?"
75eda14cbcSMatt Macy	fi
76eda14cbcSMatt Macy}
77eda14cbcSMatt Macy
78eda14cbcSMatt Macydo_status()
79eda14cbcSMatt Macy{
80eda14cbcSMatt Macy	check_module_loaded "zfs" || exit 0
81eda14cbcSMatt Macy
82eda14cbcSMatt Macy	zfs_daemon_status "$ZED_PIDFILE" "$ZED" "$ZED_NAME"
83eda14cbcSMatt Macy	return "$?"
84eda14cbcSMatt Macy}
85eda14cbcSMatt Macy
86eda14cbcSMatt Macydo_reload()
87eda14cbcSMatt Macy{
88eda14cbcSMatt Macy	check_module_loaded "zfs" || exit 0
89eda14cbcSMatt Macy
90eda14cbcSMatt Macy	zfs_action "Reloading ZFS Event Daemon" zfs_daemon_reload \
91eda14cbcSMatt Macy	    "$ZED_PIDFILE" "$ZED_NAME"
92eda14cbcSMatt Macy	return "$?"
93eda14cbcSMatt Macy}
94eda14cbcSMatt Macy
95eda14cbcSMatt Macy# ----------------------------------------------------
96eda14cbcSMatt Macy
97eda14cbcSMatt Macyif [ ! -e /sbin/openrc-run ]; then
98eda14cbcSMatt Macy	case "$1" in
99eda14cbcSMatt Macy		start)
100eda14cbcSMatt Macy			do_start
101eda14cbcSMatt Macy			;;
102eda14cbcSMatt Macy		stop)
103eda14cbcSMatt Macy			do_stop
104eda14cbcSMatt Macy			;;
105eda14cbcSMatt Macy		status)
106eda14cbcSMatt Macy			do_status
107eda14cbcSMatt Macy			;;
108eda14cbcSMatt Macy		reload|force-reload)
109eda14cbcSMatt Macy			do_reload
110eda14cbcSMatt Macy			;;
111eda14cbcSMatt Macy		restart)
112eda14cbcSMatt Macy			do_stop
113eda14cbcSMatt Macy			do_start
114eda14cbcSMatt Macy			;;
115eda14cbcSMatt Macy		*)
116eda14cbcSMatt Macy			[ -n "$1" ] && echo "Error: Unknown command $1."
117eda14cbcSMatt Macy			echo "Usage: $0 {start|stop|status|reload|restart}"
118eda14cbcSMatt Macy			exit 1
119eda14cbcSMatt Macy			;;
120eda14cbcSMatt Macy	esac
121eda14cbcSMatt Macy
122eda14cbcSMatt Macy	exit $?
123eda14cbcSMatt Macyelse
124eda14cbcSMatt Macy	# Create wrapper functions since Gentoo don't use the case part.
125eda14cbcSMatt Macy	depend() { do_depend; }
126eda14cbcSMatt Macy	start() { do_start; }
127eda14cbcSMatt Macy	stop() { do_stop; }
128eda14cbcSMatt Macy	status() { do_status; }
129eda14cbcSMatt Macy	reload() { do_reload; }
130eda14cbcSMatt Macyfi
131