179 lines
4.8 KiB
Bash
179 lines
4.8 KiB
Bash
#! /bin/sh
|
|
# Copyright (c) 1996-2002 SuSE GmbH Nuernberg, Germany. All rights reserved.
|
|
#
|
|
# Author: Christopher Mahmood <ckm+snmp@suse.de>, Remo Behn <ray+snmp@suse.de>
|
|
#
|
|
# /etc/init.d/snmpd
|
|
#
|
|
### BEGIN INIT INFO
|
|
# Provides: net-snmp snmp
|
|
# Required-Start: $remote_fs
|
|
# Should-Start: $syslog $network
|
|
# Required-Stop: $remote_fs
|
|
# Should-Stop: $syslog $network
|
|
# Default-Start: 2 3 5
|
|
# Default-Stop: 0 1 6
|
|
# Description: Net-SNMP snmpd
|
|
# Short-Description: Net-SNMP snmpd
|
|
### END INIT INFO
|
|
|
|
SNMPD=/usr/sbin/snmpd
|
|
AGENTDIR=/usr/lib/net-snmp/agents
|
|
SNMPDCONF=/etc/snmp/snmpd.conf
|
|
|
|
test -x $SNMPD || exit 5
|
|
|
|
# Check for existence of needed config file and read it
|
|
SNMPD_CONFIG=/etc/sysconfig/net-snmp
|
|
test -r $SNMPD_CONFIG || { echo "$SNMPD_CONFIG not existing";
|
|
if [ "$1" = "stop" ]; then exit 0;
|
|
else exit 6; fi; }
|
|
|
|
# Read config
|
|
. $SNMPD_CONFIG
|
|
|
|
# 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_failed <num> set local and overall rc status to <num><num>
|
|
# 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 - generic or unspecified error
|
|
# 2 - invalid or excess argument(s)
|
|
# 3 - unimplemented feature (e.g. "reload")
|
|
# 4 - insufficient privilege
|
|
# 5 - program is not installed
|
|
# 6 - program is not configured
|
|
# 7 - program is not running
|
|
#
|
|
# 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.
|
|
|
|
# check whether to enable agentx support and get list of installed
|
|
# agents
|
|
get_agents()
|
|
{
|
|
agents=
|
|
agentargs=''
|
|
for agent in $AGENTDIR/*; do
|
|
test -x $agent || continue
|
|
agents="$agents $agent"
|
|
agentargs="-x /var/run/agentx/master"
|
|
done
|
|
}
|
|
|
|
case "$1" in
|
|
start)
|
|
echo -n "Starting snmpd"
|
|
#
|
|
# do not even try to start if the log file is (2GB-1MB) big.
|
|
# the snmpd doesnt handle LFS properly
|
|
#
|
|
SNMPD_LOGFILE="${SNMPD_LOGFILE:-/var/log/net-snmpd.log}"
|
|
if [ -e "$SNMPD_LOGFILE" ] ; then
|
|
SNMPD_SIZE_LOGFILE="$(stat -c "%s" $SNMPD_LOGFILE)"
|
|
SNMPD_SIZE_MAX="1073741824"
|
|
if [ $SNMPD_SIZE_LOGFILE -gt $SNMPD_SIZE_MAX ] ; then
|
|
echo -e "\n\"$SNMPD_LOGFILE\" was to large. Running 'logrotate' for net-snmp." >&2
|
|
/usr/sbin/logrotate /etc/logrotate.d/net-snmp
|
|
fi # if [ $SNMPD_SIZE_LOGFILE -gt $SNMPD_SIZE_MAX ] ; then
|
|
fi # if [ -e "$SNMPD_LOGFILE" ] ; then
|
|
get_agents
|
|
# Do not add -c /etc/snmpd.conf, since it is already loaded by default.
|
|
if [ $SNMPDCONF = "/etc/snmp/snmpd.conf" ]; then
|
|
SNMPDCONF=""
|
|
else
|
|
SNMPDCONF="-c $SNMPDCONF"
|
|
fi
|
|
case "${SNMPD_USE_SMUX:-yes}" in
|
|
[Nn][Oo])
|
|
SNMPDNOSMUX="-I -smux"
|
|
;;
|
|
esac
|
|
case "${SNMPD_LOG_SUCCESSFUL_CONNECTIONS:-yes}" in
|
|
[Nn][Oo])
|
|
SNMPDNOTCPWRAPPERLOG="--dontLogTCPWrappersConnects"
|
|
;;
|
|
esac
|
|
startproc $SNMPD $SNMPDCONF -r -A -LF ${SNMPD_LOGLEVEL:-d} $SNMPD_LOGFILE -p /var/run/snmpd.pid $agentargs $SNMPDNOSMUX $SNMPDNOTCPWRAPPERLOG
|
|
rc_status -v
|
|
rc_reset
|
|
|
|
# start all agents
|
|
if test -n "$agents"; then
|
|
usleep 300000
|
|
for agent in $agents; do
|
|
echo -en "\tStarting `basename $agent`"
|
|
startproc -t1 $agent
|
|
rc_status -v ; rc_reset
|
|
done
|
|
fi
|
|
;;
|
|
stop)
|
|
echo -n "Shutting down snmpd:"
|
|
killproc -TERM $SNMPD
|
|
rc_status -v ; rc_reset
|
|
# we also need to make sure all agents die
|
|
if test -n "$agents"; then
|
|
for agent in $AGENTDIR/*; do
|
|
test -x $agent || continue
|
|
echo -ne "\tShutting down `basename $agent`:"
|
|
killproc $agent
|
|
rc_status -v ; rc_reset
|
|
done
|
|
fi
|
|
;;
|
|
try-restart)
|
|
$0 status >/dev/null && $0 restart
|
|
rc_status
|
|
;;
|
|
restart)
|
|
$0 stop
|
|
$0 start
|
|
rc_status
|
|
;;
|
|
force-reload)
|
|
echo -n "Reload service snmpd:"
|
|
killproc -HUP $SNMPD
|
|
rc_status -v
|
|
;;
|
|
reload)
|
|
echo -n "Reload service snmpd:"
|
|
killproc -HUP $SNMPD
|
|
rc_status -v
|
|
;;
|
|
status)
|
|
echo -n "Checking for service snmpd:"
|
|
checkproc $SNMPD
|
|
rc_status -v
|
|
get_agents
|
|
if test -n "$agents"; then
|
|
echo -e "Checking for agents:"
|
|
|
|
for agent in $agents; do
|
|
echo -en "\t`basename $agent`"
|
|
checkproc $agent
|
|
rc_status -v
|
|
done
|
|
fi
|
|
;;
|
|
*)
|
|
echo "Usage: $0 {start|stop|try-restart|restart|force-reload|reload|status}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
rc_exit
|
|
|