diff options
Diffstat (limited to '')
-rw-r--r-- | smartd.cygwin.initd.in | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/smartd.cygwin.initd.in b/smartd.cygwin.initd.in new file mode 100644 index 0000000..8879b74 --- /dev/null +++ b/smartd.cygwin.initd.in @@ -0,0 +1,131 @@ +#! /bin/sh +# +# smartmontools initd file for Cygwin smartd +# +# Home page of code is: http://www.smartmontools.org +# +# Copyright (C) 2004-17 Christian Franke +# +# SPDX-License-Identifier: GPL-2.0-or-later +# +# $Id: smartd.cygwin.initd.in 4760 2018-08-19 18:45:53Z chrfranke $ +# + +SMARTD_BIN=/usr/local/sbin/smartd + +# The following settings may be changed by the configuration file below +# Service Name (must be unique) +smartd_svcname=smartd +# Service display name +smartd_svcdisp="CYGWIN smartd" +# Service description +smartd_svcdesc="\ +Controls and monitors storage devices using the Self-Monitoring, \ +Analysis and Reporting Technology System (SMART) built into \ +ATA/SATA and SCSI/SAS hard drives and solid-state drives. \ +www.smartmontools.org" + +# Source configuration file. +[ -r /etc/sysconfig/smartmontools ] && . /etc/sysconfig/smartmontools + +PID_FILE=/var/run/smartd.pid +RETVAL=0 + +# Note: "[ -r $PID_FILE ]" is not used here. On Cygwin, this command may +# return success even if the file is present but cannot be read by current user. +# If smartd is running as service, smartd.pid is owned by local system account +# which is different from any user ever executing this script. + +case "$1" in + start) + if cygrunsrv -L 2>/dev/null | grep "^${smartd_svcname}$" >/dev/null 2>&1; then + echo -n "Starting service $smartd_svcname: " + cygrunsrv -S "$smartd_svcname" + else + echo -n "Starting smartd as daemon: " + $SMARTD_BIN -p $PID_FILE $smartd_opts + fi + RETVAL=$? + ;; + stop) + echo -n "Shutting down smartd: " + pid="`cat $PID_FILE 2>/dev/null`" && kill "$pid" + RETVAL=$? + ;; + reload) + echo -n "Reloading smartd configuration: " + pid="`cat $PID_FILE 2>/dev/null`" && kill -HUP "$pid" + RETVAL=$? + ;; + report) + echo -n "Checking SMART devices now: " + pid="`cat $PID_FILE 2>/dev/null`" && kill -USR1 "$pid" + RETVAL=$? + ;; + restart) + $0 stop + sleep 1 + $0 start + exit $? + ;; + install) + shift + [ $# -eq 0 ] || smartd_opts="$*" + dep=; dep2= + if cygrunsrv -L 2>/dev/null | grep "^syslogd$" >/dev/null 2>&1; then + dep="syslogd" + fi + if cygrunsrv -L 2>/dev/null | grep "^syslog-ng" >/dev/null 2>&1; then + dep2="syslog-ng" + fi + if [ -z "$dep" ]; then + if [ -z "$dep2" ]; then + echo "Warning: no syslog service installed, smartd will write to windows event log."; + else + dep="$dep2" + fi + else + if [ -z "$dep2" ]; then + : + else + dep= + echo "Warning: both syslogd and syslog-ng installed, dependency not set." + fi + fi + echo "Installing service ${smartd_svcname}${dep:+ (depending on '$dep')}${smartd_opts:+ with options '$smartd_opts'}:" + cygrunsrv -I "$smartd_svcname" -d "$smartd_svcdisp" -f "$smartd_svcdesc" ${dep:+-y} $dep \ + -e CYGWIN="$CYGWIN" -p $SMARTD_BIN -a "-n -p ${PID_FILE}${smartd_opts:+ }$smartd_opts" + RETVAL=$? + ;; + remove) + echo "Removing service $smartd_svcname:" + cygrunsrv -R "$smartd_svcname" + RETVAL=$? + ;; + status) + echo -n "Checking smartd status: " + if cygrunsrv -L 2>/dev/null | grep "^${smartd_svcname}$" >/dev/null 2>&1; then + if cygrunsrv -Q "$smartd_svcname" 2>/dev/null | grep "State *: Running" >/dev/null 2>&1; then + echo "running as service '$smartd_svcname'." + elif ps -e 2>/dev/null | grep " ${SMARTD_BIN}$" >/dev/null 2>&1; then + echo "installed as service '$smartd_svcname' but running as daemon." + else + echo "installed as service '$smartd_svcname' but not running." + RETVAL=1 + fi + elif ps -e 2>/dev/null | grep " ${SMARTD_BIN}$" >/dev/null 2>&1; then + echo "running as daemon." + else + echo "not running." + RETVAL=1 + fi + exit $RETVAL + ;; + *) + echo "Usage: $0 {start|stop|restart|reload|report|status}" + echo " $0 {install [options]|remove}" + exit 1 +esac + +if [ "$RETVAL" -eq 0 ]; then echo "done"; else echo "ERROR"; fi +exit $RETVAL |