118 lines
2.3 KiB
Bash
Executable File
118 lines
2.3 KiB
Bash
Executable File
#!/bin/sh
|
|
# validation reporter - reports validation failures to a collection server.
|
|
# Copyright NLnet Labs, 2010
|
|
# BSD license.
|
|
|
|
|
|
###
|
|
# Here is the configuration for the validation reporter
|
|
# it greps the failure lines out of the log and sends them to a server.
|
|
|
|
# The pidfile for the reporter daemon.
|
|
pidfile="/var/run/validation-reporter.pid"
|
|
|
|
# The logfile to watch for logged validation failures.
|
|
logfile="/var/log/unbound.log"
|
|
|
|
# how to notify the upstream
|
|
# nc is netcat, it sends tcp to given host port. It makes a tcp connection
|
|
# and writes one log-line to it (grepped from the logfile).
|
|
# the notify command can be: "nc the.server.name.org 1234"
|
|
# the listening daemon could be: nc -lk 127.0.0.1 1234 >> outputfile &
|
|
notify_cmd="nc localhost 1234"
|
|
|
|
|
|
###
|
|
# Below this line is the code for the validation reporter,
|
|
# first the daemon itself, then the controller for the daemon.
|
|
reporter_daemon() {
|
|
trap "rm -f \"$pidfile\"" EXIT
|
|
tail -F $logfile | grep --line-buffered "unbound.*info: validation failure" | \
|
|
while read x; do
|
|
echo "$x" | $notify_cmd
|
|
done
|
|
}
|
|
|
|
|
|
###
|
|
# controller for daemon.
|
|
start_daemon() {
|
|
echo "starting reporter"
|
|
nohup $0 rundaemon </dev/null >/dev/null 2>&1 &
|
|
echo $! > "$pidfile"
|
|
}
|
|
|
|
kill_daemon() {
|
|
echo "stopping reporter"
|
|
if test -s "$pidfile"; then
|
|
kill `cat "$pidfile"`
|
|
# check it is really dead
|
|
if kill -0 `cat "$pidfile"` >/dev/null 2>&1; then
|
|
sleep 1
|
|
while kill -0 `cat "$pidfile"` >/dev/null 2>&1; do
|
|
kill `cat "$pidfile"` >/dev/null 2>&1
|
|
echo "waiting for reporter to stop"
|
|
sleep 1
|
|
done
|
|
fi
|
|
fi
|
|
}
|
|
|
|
get_status_daemon() {
|
|
if test -s "$pidfile"; then
|
|
if kill -0 `cat "$pidfile"`; then
|
|
return 0;
|
|
fi
|
|
fi
|
|
return 1;
|
|
}
|
|
|
|
restart_daemon() {
|
|
kill_daemon
|
|
start_daemon
|
|
}
|
|
|
|
condrestart_daemon() {
|
|
if get_status_daemon; then
|
|
echo "reporter ("`cat "$pidfile"`") is running"
|
|
exit 0
|
|
fi
|
|
start_daemon
|
|
exit 0
|
|
}
|
|
|
|
status_daemon() {
|
|
if get_status_daemon; then
|
|
echo "reporter ("`cat "$pidfile"`") is running"
|
|
exit 0
|
|
fi
|
|
echo "reporter is not running"
|
|
exit 1
|
|
}
|
|
|
|
case "$1" in
|
|
rundaemon)
|
|
reporter_daemon
|
|
;;
|
|
start)
|
|
start_daemon
|
|
;;
|
|
stop)
|
|
kill_daemon
|
|
;;
|
|
restart)
|
|
restart_daemon
|
|
;;
|
|
condrestart)
|
|
condrestart_daemon
|
|
;;
|
|
status)
|
|
status_daemon
|
|
;;
|
|
*)
|
|
echo "Usage: $0 {start|stop|restart|condrestart|status}"
|
|
exit 2
|
|
;;
|
|
esac
|
|
exit $?
|