Select Git revision
smartd.initd.in
smartd.initd.in 9.65 KiB
#! @SHELL@
# smartmontools init file for smartd
# Copyright (C) 2002-4 Bruce Allen <smartmontools-support@lists.sourceforge.net>
# $Id: smartd.initd.in,v 1.23 2004/04/04 12:49:31 ballen4705 Exp $
# For RedHat and cousins:
# chkconfig: 2345 40 40
# description: Self Monitoring and Reporting Technology (SMART) Daemon
# processname: smartd
# For SuSE and cousins
### BEGIN INIT INFO
# Provides: smartd
# Required-Start: $syslog
# X-UnitedLinux-Should-Start: $sendmail
# Required-Stop: $syslog
# X-UnitedLinux-Should-Stop:
# Default-Start: 2 3 5
# Default-Stop:
# Short-Description: Monitors disk and tape health via S.M.A.R.T.
# Description: Start S.M.A.R.T. disk and tape monitor.
### END INIT INFO
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2, or (at your option) any later
# version.
# You should have received a copy of the GNU General Public License (for
# example COPYING); if not, write to the Free Software Foundation, Inc., 675
# Mass Ave, Cambridge, MA 02139, USA.
# This code was originally developed as a Senior Thesis by Michael Cornwell
# at the Concurrent Systems Laboratory (now part of the Storage Systems
# Research Center), Jack Baskin School of Engineering, University of
# California, Santa Cruz. http://ssrc.soe.ucsc.edu/.
# Uncomment the line below to pass options to smartd on startup.
# Note that distribution specific configuration files like
# /etc/{default,sysconfig}/smartmontools might override these
#smartd_opts="--interval=1800"
report_unsupported () {
echo "Currently the smartmontools package has no init script for"
echo "the $1 OS/distribution. If you can provide one or this"
echo "one works after removing some ifdefs, please contact"
echo "smartmontools-support@lists.sourceforge.net."
exit 1
}
# Red Hat or Yellow Dog or Mandrake
if [ -f /etc/redhat-release -o -f /etc/yellowdog-release -o -f /etc/mandrake-release ] ; then
# Source function library
. /etc/rc.d/init.d/functions
# Source configuration file. This should define the shell variable smartd_opts
[ -r /etc/sysconfig/smartmontools ] && . /etc/sysconfig/smartmontools
RETVAL=0
prog=smartd
case "$1" in
start)
echo -n $"Starting $prog: "
daemon /usr/sbin/smartd $smartd_opts
touch /var/lock/subsys/smartd
echo
;;
stop)
echo -n $"Shutting down $prog: "
killproc smartd
rm -f /var/lock/subsys/smartd
echo
;;
reload)
echo -n $"Reloading $prog daemon configuration: "
killproc /usr/sbin/smartd -HUP
RETVAL=$?
echo
;;
report)
echo -n $"Checking SMART devices now: "
killproc /usr/sbin/smartd -USR1
RETVAL=$?
echo
;;
restart)
$0 stop
$0 start
;;
status)
status $prog
;;
*)
echo $"Usage: $0 {start|stop|reload|report|restart|status}"
RETVAL=1
esac
exit $RETVAL
# Slackware
elif [ -f /etc/slackware-version ] ; then
# Source configuration file. This should define the shell variable smartd_opts.
# Email smartmontools-support@lists.sourceforge.net if there is a better choice
# of path for Slackware.
[ -r /etc/sysconfig/smartmontools ] && . /etc/sysconfig/smartmontools
case "$1" in
start)
echo -n "Starting smartd: "
smartd $smartd_opts
echo
;;
stop)
echo -n "Shutting down smartd: "
killall smartd
echo
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: smartd {start|stop|restart}"
exit 1
esac
exit 0
# SuSE
elif [ -f /etc/SuSE-release ] ; then
SMARTD_BIN=/usr/sbin/smartd
test -x $SMARTD_BIN || exit 5
# Existence of config file is optional
SMARTD_CONFIG=/etc/smartd.conf
# source configuration file. This should set the shell variable smartd_opts
[ -r /etc/default/smartmontools ] && . /etc/default/smartmontools
# Shell functions sourced from /etc/rc.status:
# rc_check check and set local and overall rc status
# rc_status check and set local and overall rc status
# rc_status -v ditto but be verbose in local rc status
# rc_status -v -r ditto and clear the local rc status
# rc_failed set local and overall rc status to failed
# rc_reset clear local rc status (overall remains)
# rc_exit exit appropriate to overall rc status
. /etc/rc.status
# First reset status of this service
rc_reset
# Return values acc. to LSB for all commands but status:
# 0 - success
# 1 - misc error
# 2 - invalid or excess args
# 3 - unimplemented feature (e.g. reload)
# 4 - insufficient privilege
# 5 - program not installed
# 6 - program not configured
#
# Note that starting an already running service, stopping
# or restarting a not-running service as well as the restart
# with force-reload (in case signalling is not supported) are
# considered a success.
case "$1" in
start)
echo -n "Starting smartd"
## Start daemon with startproc(8). If this fails
## the echo return value is set appropriate.
# startproc should return 0, even if service is
# already running to match LSB spec.
startproc $SMARTD_BIN $smartd_opts
# Remember status and be verbose
rc_status -v
;;
stop)
echo -n "Shutting down smartd"
killproc -TERM $SMARTD_BIN
# Remember status and be verbose
rc_status -v
;;
restart | force-reload)
$0 stop
$0 start
;;
reload)
## Like force-reload, but if daemon does not support
## signaling, do nothing (!)
rc_failed 3
rc_status -v
;;
status)
echo -n "Checking for service smartd: "
## Check status with checkproc(8), if process is running
## checkproc will return with exit status 0.
# Status has a slightly different for the status command:
# 0 - service running
# 1 - service dead, but /var/run/ pid file exists
# 2 - service dead, but /var/lock/ lock file exists
# 3 - service not running
# NOTE: checkproc returns LSB compliant status values.
checkproc $SMARTD_BIN
rc_status -v
;;
probe)
## Optional: Probe for the necessity of a reload, print out the
## argument to this init script which is required for a reload.
## Note: probe is not (yet) part of LSB (as of 1.2)
test $SMARTD_CONFIG -nt /var/run/smartd.pid && echo reload
;;
*)
echo "Usage: $0 {start|stop|status|restart|force-reload|reload|probe}"
exit 1
;;
esac
rc_exit
# Debian case
elif [ -f /etc/debian_version ] ; then
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
SMARTCTL=/usr/sbin/smartctl
SMARTD=/usr/sbin/smartd
SMARTDPID=/var/run/smartd.pid
[ -x $SMARTCTL ] || exit 0
[ -x $SMARTD ] || exit 0
RET=0
# source configuration file
[ -r /etc/default/smartmontools ] && . /etc/default/smartmontools
smartd_opts="--pidfile $SMARTDPID $smartd_opts"
case "$1" in
start)
echo -n "Starting S.M.A.R.T. daemon: smartd"
if start-stop-daemon --start --quiet --pidfile $SMARTDPID \
--exec $SMARTD -- $smartd_opts; then
echo "."
else
echo " (failed)"
RET=1
fi
;;
stop)
echo -n "Stopping S.M.A.R.T. daemon: smartd"
start-stop-daemon --stop --quiet --oknodo --pidfile $SMARTDPID
echo "."
;;
restart|force-reload)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/smartmontools {start|stop|restart|force-reload}"
exit 1
esac
exit $RET
elif [ -f /etc/gentoo-release ] ; then
report_unsupported "Gentoo"
elif [ -f /etc/turbolinux-release ] ; then
report_unsupported "Turbolinux"
elif [ -f /etc/environment.corel ] ; then
report_unsupported "Corel"
# PLEASE ADD OTHER LINUX DISTRIBUTIONS JUST BEFORE THIS LINE, USING elif
elif uname -a | grep FreeBSD > /dev/null 2>&1 ; then
# Source configuration file. This should define the shell variable smartd_opts.
# Email smartmontools-support@lists.sourceforge.net if there is a better choice
# of path for FreeBSD
[ -r /etc/default/smartmontools ] && . /etc/default/smartmontools
PID_FILE=/var/run/smartd.pid
case "$1" in
start)
smartd -p $PID_FILE $smartd_opts
echo -n "smartd "
;;
stop)
kill `cat $PID_FILE`
echo -n "smartd "
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: smartd {start|stop|restart}"
exit 1
esac
exit 0
elif uname -a | grep SunOS > /dev/null 2>&1 ; then
# Source configuration file. This should define the shell variable smartd_opts.
# Email smartmontools-support@lists.sourceforge.net if there is a better choice
# of path for Solaris
[ -r /etc/default/smartmontools ] && . /etc/default/smartmontools
PID_FILE=/var/run/smartd.pid
case "$1" in
start)
smartd -p $PID_FILE $smartd_opts
echo -n "smartd "
;;
stop)
[ -f $PID_FILE ] && kill `cat $PID_FILE`
echo -n "smartd "
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: smartd {start|stop|restart}"
exit 1
esac
exit 0
# Add other OSes HERE, using elif...
else
report_unsupported "Unknown"
fi
# One should NEVER arrive here, except for a badly written case above,
# that fails to exit.
echo "SOMETHING IS WRONG WITH THE SMARTD STARTUP SCRIPT"
echo "PLEASE CONTACT smartmontools-support@lists.sourceforge.net"
exit 1