]> git.proxmox.com Git - mirror_smartmontools-debian.git/blob - debian/smartmontools.init
Merge commit 'upstream/5.39.1'
[mirror_smartmontools-debian.git] / debian / smartmontools.init
1 #!/bin/sh -e
2 #
3 # smartmontools init.d startup script
4 #
5 # (C) 2003,04,07 Guido Günther <agx@sigxcpu.org>
6 #
7 # loosely based on the init script that comes with smartmontools which is
8 # copyrighted 2002 by Bruce Allen <smartmontools-support@lists.sourceforge.net>
9 #
10 ### BEGIN INIT INFO
11 # Provides: smartmontools
12 # Required-Start: $syslog $remote_fs
13 # Required-Stop: $syslog $remote_fs
14 # Default-Start: 2 3 4 5
15 # Default-Stop: 1
16 # Short-Description: SMART monitoring daemon
17 ### END INIT INFO
18
19 SMARTCTL=/usr/sbin/smartctl
20 DAEMON=/usr/sbin/smartd
21 PIDFILE=/var/run/smartd.pid
22 [ -x $SMARTCTL ] || exit 0
23 [ -x $DAEMON ] || exit 0
24 . /lib/lsb/init-functions
25
26 RET=0
27
28 [ -r /etc/default/smartmontools ] && . /etc/default/smartmontools
29
30 smartd_opts="--pidfile $PIDFILE $smartd_opts"
31
32 enable_smart() {
33 log_action_begin_msg "Enabling S.M.A.R.T."
34 for device in $enable_smart; do
35 log_action_cont_msg "$device"
36 if ! $SMARTCTL --quietmode=errorsonly --smart=on $device; then
37 log_action_cont_msg "(failed)"
38 RET=2
39 fi
40 done
41 log_action_end_msg 0
42 }
43
44 check_start_smartd_option() {
45 if [ ! "$start_smartd" = "yes" ]; then
46 log_warning_msg "Not starting S.M.A.R.T. daemon smartd, disabled via /etc/default/smartmontools"
47 return 1
48 else
49 return 0
50 fi
51 }
52
53 running_pid()
54 {
55 # Check if a given process pid's cmdline matches a given name
56 pid=$1
57 name=$2
58 [ -z "$pid" ] && return 1
59 [ ! -d /proc/$pid ] && return 1
60 cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1`
61 # Is this the expected child?
62 [ "$cmd" != "$name" ] && return 1
63 return 0
64 }
65
66 running()
67 {
68 # Check if the process is running looking at /proc
69 # (works for all users)
70 # No pidfile, probably no daemon present
71 [ ! -f "$PIDFILE" ] && return 1
72 # Obtain the pid and check it against the binary name
73 pid=`cat $PIDFILE`
74 running_pid $pid $DAEMON || return 1
75 return 0
76 }
77
78 case "$1" in
79 start)
80 [ -n "$enable_smart" ] && enable_smart
81 if check_start_smartd_option; then
82
83 log_daemon_msg "Starting S.M.A.R.T. daemon" "smartd"
84 if running; then
85 log_progress_msg "already running"
86 log_end_msg 0
87 exit 0
88 fi
89 rm -f $PIDFILE
90 if start-stop-daemon --start --quiet --pidfile $PIDFILE \
91 --exec $DAEMON -- $smartd_opts; then
92 log_end_msg 0
93 else
94 log_end_msg 1
95 RET=1
96 fi
97 fi
98 ;;
99 stop)
100 log_daemon_msg "Stopping S.M.A.R.T. daemon" "smartd"
101 start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
102 log_end_msg 0
103 ;;
104 reload|force-reload)
105 log_daemon_msg "Reloading S.M.A.R.T. daemon" "smartd"
106 if start-stop-daemon --stop --quiet --signal 1 \
107 --pidfile $PIDFILE; then
108 log_end_msg 0
109 else
110 log_end_msg 1
111 RET=1
112 fi
113 ;;
114 restart)
115 if check_start_smartd_option; then
116 log_daemon_msg "Restarting S.M.A.R.T. daemon" "smartd"
117 start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDFILE
118 rm -f $PIDFILE
119 if start-stop-daemon --start --quiet --pidfile $PIDFILE \
120 --exec $DAEMON -- $smartd_opts; then
121 log_end_msg 0
122 else
123 log_end_msg 1
124 RET=1
125 fi
126 fi
127 ;;
128 status)
129 status_of_proc $DAEMON smartd && exit 0 || exit $?
130 ;;
131 *)
132 echo "Usage: /etc/init.d/smartmontools {start|stop|restart|reload|force-reload|status}"
133 exit 1
134 esac
135
136 exit $RET