xref: /freebsd/sys/contrib/openzfs/etc/init.d/zfs-zed.in (revision 61145dc2b94f12f6a47344fb9aac702321880e43)
1eda14cbcSMatt Macy#!@DEFAULT_INIT_SHELL@
2*61145dc2SMartin Matuska# SPDX-License-Identifier: BSD-2-Clause
3e92ffd9bSMartin Matuska# shellcheck disable=SC2154
4eda14cbcSMatt Macy#
5eda14cbcSMatt Macy# zfs-zed
6eda14cbcSMatt Macy#
7eda14cbcSMatt Macy# chkconfig:    2345 29 99
8eda14cbcSMatt Macy# description:  This script will start and stop the ZFS Event Daemon.
9eda14cbcSMatt Macy# probe: true
10eda14cbcSMatt Macy#
11eda14cbcSMatt Macy### BEGIN INIT INFO
12eda14cbcSMatt Macy# Provides:          zfs-zed
13eda14cbcSMatt Macy# Required-Start:    zfs-mount
14eda14cbcSMatt Macy# Required-Stop:     zfs-mount
15eda14cbcSMatt Macy# Default-Start:     2 3 4 5
16eda14cbcSMatt Macy# Default-Stop:      0 1 6
17eda14cbcSMatt Macy# X-Stop-After:      zfs-share
18eda14cbcSMatt Macy# Short-Description: ZFS Event Daemon
19eda14cbcSMatt Macy# Description:       zed monitors ZFS events. When a zevent is posted, zed
20eda14cbcSMatt Macy#                    will run any scripts that have been enabled for the
21eda14cbcSMatt Macy#                    corresponding zevent class.
22eda14cbcSMatt Macy### END INIT INFO
23eda14cbcSMatt Macy#
24eda14cbcSMatt Macy# Released under the 2-clause BSD license.
25eda14cbcSMatt Macy#
2616038816SMartin Matuska# This script is based on debian/zfsutils.zfs.init from the
2716038816SMartin Matuska# Debian GNU/kFreeBSD zfsutils 8.1-3 package, written by Aurelien Jarno.
28eda14cbcSMatt Macy
29eda14cbcSMatt Macy# Source the common init script
30eda14cbcSMatt Macy. @sysconfdir@/zfs/zfs-functions
31eda14cbcSMatt Macy
32eda14cbcSMatt MacyZED_NAME="zed"
33eda14cbcSMatt MacyZED_PIDFILE="@runstatedir@/$ZED_NAME.pid"
34eda14cbcSMatt Macy
3516038816SMartin Matuska# shellcheck disable=SC2034
36eda14cbcSMatt Macyextra_started_commands="reload"
37eda14cbcSMatt Macy
38eda14cbcSMatt Macy# Exit if the package is not installed
39eda14cbcSMatt Macy[ -x "$ZED" ] || exit 0
40eda14cbcSMatt Macy
41eda14cbcSMatt Macy# ----------------------------------------------------
42eda14cbcSMatt Macy
43eda14cbcSMatt Macydo_depend()
44eda14cbcSMatt Macy{
45eda14cbcSMatt Macy	after zfs-mount localmount
46eda14cbcSMatt Macy}
47eda14cbcSMatt Macy
48eda14cbcSMatt Macydo_start()
49eda14cbcSMatt Macy{
50eda14cbcSMatt Macy	check_module_loaded "zfs" || exit 0
51eda14cbcSMatt Macy
52eda14cbcSMatt Macy	ZED_ARGS="$ZED_ARGS -p $ZED_PIDFILE"
53eda14cbcSMatt Macy
54eda14cbcSMatt Macy	zfs_action "Starting ZFS Event Daemon" zfs_daemon_start \
55eda14cbcSMatt Macy	    "$ZED_PIDFILE" "$ZED" "$ZED_ARGS"
56eda14cbcSMatt Macy	return "$?"
57eda14cbcSMatt Macy}
58eda14cbcSMatt Macy
59eda14cbcSMatt Macydo_stop()
60eda14cbcSMatt Macy{
6116038816SMartin Matuska	local pools
62eda14cbcSMatt Macy	check_module_loaded "zfs" || exit 0
63eda14cbcSMatt Macy
64eda14cbcSMatt Macy	zfs_action "Stopping ZFS Event Daemon" zfs_daemon_stop \
6516038816SMartin Matuska	   "$ZED_PIDFILE" "$ZED" "$ZED_NAME" || return "$?"
6616038816SMartin Matuska
67eda14cbcSMatt Macy	# Let's see if we have any pools imported
68eda14cbcSMatt Macy	pools=$("$ZPOOL" list -H -oname)
69eda14cbcSMatt Macy	if [ -z "$pools" ]
70eda14cbcSMatt Macy	then
71eda14cbcSMatt Macy		# No pools imported, it is/should be safe/possible to
72eda14cbcSMatt Macy		# unload modules.
73716fd348SMartin Matuska		zfs_action "Unloading modules" rmmod zfs 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
971719886fSMartin Matuskaif @IS_SYSV_RC@
981719886fSMartin Matuskathen
99eda14cbcSMatt Macy	case "$1" in
100eda14cbcSMatt Macy		start)
101eda14cbcSMatt Macy			do_start
102eda14cbcSMatt Macy			;;
103eda14cbcSMatt Macy		stop)
104eda14cbcSMatt Macy			do_stop
105eda14cbcSMatt Macy			;;
106eda14cbcSMatt Macy		status)
107eda14cbcSMatt Macy			do_status
108eda14cbcSMatt Macy			;;
109eda14cbcSMatt Macy		reload|force-reload)
110eda14cbcSMatt Macy			do_reload
111eda14cbcSMatt Macy			;;
112eda14cbcSMatt Macy		restart)
113eda14cbcSMatt Macy			do_stop
114eda14cbcSMatt Macy			do_start
115eda14cbcSMatt Macy			;;
116eda14cbcSMatt Macy		*)
117eda14cbcSMatt Macy			[ -n "$1" ] && echo "Error: Unknown command $1."
118eda14cbcSMatt Macy			echo "Usage: $0 {start|stop|status|reload|restart}"
119eda14cbcSMatt Macy			exit 1
120eda14cbcSMatt Macy			;;
121eda14cbcSMatt Macy	esac
122eda14cbcSMatt Macy
123eda14cbcSMatt Macy	exit $?
124eda14cbcSMatt Macyelse
125eda14cbcSMatt Macy	# Create wrapper functions since Gentoo don't use the case part.
126eda14cbcSMatt Macy	depend() { do_depend; }
127eda14cbcSMatt Macy	start() { do_start; }
128eda14cbcSMatt Macy	stop() { do_stop; }
129eda14cbcSMatt Macy	status() { do_status; }
130eda14cbcSMatt Macy	reload() { do_reload; }
131eda14cbcSMatt Macyfi
132