aboutsummaryrefslogtreecommitdiff
path: root/sys/contrib/openzfs/etc/init.d/zfs-zed.in
blob: 3d40600cea5ddaec89bf4c7ca979e89e5a246dcd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!@DEFAULT_INIT_SHELL@
# shellcheck disable=SC2154
#
# 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.
#
# This script is based on debian/zfsutils.zfs.init from the
# Debian GNU/kFreeBSD zfsutils 8.1-3 package, written by Aurelien Jarno.

# Source the common init script
. @sysconfdir@/zfs/zfs-functions

ZED_NAME="zed"
ZED_PIDFILE="@runstatedir@/$ZED_NAME.pid"

# shellcheck disable=SC2034
extra_started_commands="reload"

# 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
	check_module_loaded "zfs" || exit 0

	zfs_action "Stopping ZFS Event Daemon" zfs_daemon_stop \
	   "$ZED_PIDFILE" "$ZED" "$ZED_NAME" || return "$?"

	# 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 spl
		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 @IS_SYSV_RC@
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