NetBSD/etc/daily
jmmv 3c8a1444d9 Introduce and use the rcvar_manpage variable, which contains the manual page
name where the user should look at for documentation about rcvar.  It defaults
to 'rc.subr(5)', as rc.subr is mainly used by rc.d scripts.

This variable is useful to let the daily, weekly, monthly and security scripts
tune the warning message shown when any of the variables they handle is not
properly set.

Closes PR misc/23908.
2004-04-02 13:13:47 +00:00

291 lines
6.0 KiB
Bash

#!/bin/sh -
#
# $NetBSD: daily,v 1.59 2004/04/02 13:13:47 jmmv Exp $
# @(#)daily 8.2 (Berkeley) 1/25/94
#
export PATH=/bin:/usr/bin:/sbin:/usr/sbin
umask 077
if [ -s /etc/daily.conf ]; then
. /etc/daily.conf
fi
host=`hostname`
date=`date`
rcvar_manpage='daily.conf(5)'
echo "To: ${MAILTO:-root}"
echo "Subject: $host daily output for $date"
echo ""
if [ -f /etc/rc.subr ]; then
. /etc/rc.subr
else
echo "Can't read /etc/rc.subr; aborting."
exit 1;
fi
if [ -z "$MAILTO" -o "$USER" != "root" ]; then
MAILTO=root
fi
echo ""
echo "Uptime: " `uptime`
# Uncommenting any of the finds below would open up a race condition attack
# based on symlinks, potentially allowing removal of any file on the system.
#
#echo ""
#echo "Removing scratch and junk files:"
#if [ -d /tmp -a ! -h /tmp ]; then
# cd /tmp && {
# find . -type f -atime +3 -exec rm -f -- {} \;
# find . ! -name . -type d -mtime +1 -exec rmdir -- {} \; \
# >/dev/null 2>&1; }
#fi
#if [ -d /var/tmp -a ! -h /var/tmp ]; then
# cd /var/tmp && {
# find . ! -name . -atime +7 -exec rm -f -- {} \;
# find . ! \( -name . -o -name vi.recover \) -type d \
# -mtime +1 -exec rmdir -- {} \; \
# >/dev/null 2>&1; }
#fi
# Additional junk directory cleanup would go like this:
#if [ -d /scratch -a ! -h /scratch ]; then
# cd /scratch && {
# find . ! -name . -atime +1 -exec rm -f -- {} \;
# find . ! -name . -type d -mtime +1 -exec rmdir -- {} \; \
# >/dev/null 2>&1; }
#fi
#if [ -d /var/rwho -a ! -h /var/rwho ] ; then
# cd /var/rwho && {
# find . ! -name . -mtime +7 -exec rm -f -- {} \; ; }
#fi
DAILYDIR=`mktemp -d /tmp/_daily.XXXXXX` || exit 1
trap "/bin/rm -rf $DAILYDIR ; exit 0" EXIT INT QUIT
if ! cd "$DAILYDIR"; then
echo "Can not cd to $DAILYDIR".
exit 1
fi
TMP=daily.$$
TMP2=daily2.$$
if checkyesno find_core; then
find / \( ! -fstype local -o -fstype rdonly -o -fstype fdesc \
-o -fstype null \
-o -fstype kernfs -o -fstype procfs \) -prune -o \
-name 'lost+found' -prune -o \
\( -name '*.core' -o -name 'core' \) -type f -print > $TMP
# \( -name '[#,]*' -o -name '.#*' -o -name a.out \
# -o -name '*.CKP' -o -name '.emacs_[0-9]*' \) \
# -a -atime +3 -exec rm -f -- {} \; -a -print > $TMP
egrep '\.core$|^core$' $TMP > $TMP2
if [ -s $TMP2 ]; then
echo ""
echo "Possible core dumps:"
cat $TMP2
fi
# egrep -v '\.core' $TMP > $TMP2
# if [ -s $TMP2 ]; then
# echo ""
# echo "Deleted files:"
# cat $TMP2
# fi
rm -f $TMP $TMP2
fi
if checkyesno run_msgs; then
msgs -c
fi
if checkyesno expire_news && [ -f /etc/news.expire ]; then
/etc/news.expire
fi
if checkyesno purge_accounting && [ -f /var/account/acct ]; then
echo ""
echo "Purging accounting records:"
if [ -f /var/account/acct.0.gz ]; then
mv /var/account/acct.2.gz /var/account/acct.3.gz 2>/dev/null
mv /var/account/acct.1.gz /var/account/acct.2.gz 2>/dev/null
mv /var/account/acct.0.gz /var/account/acct.1.gz 2>/dev/null
else
mv /var/account/acct.2 /var/account/acct.3 2>/dev/null
mv /var/account/acct.1 /var/account/acct.2 2>/dev/null
mv /var/account/acct.0 /var/account/acct.1 2>/dev/null
fi
cp /var/account/acct /var/account/acct.0
sa -sq
if [ -f /var/account/acct.1.gz ]; then
gzip /var/account/acct.0
fi
fi
if checkyesno run_calendar; then
calendar -a > $TMP 2>&1
if [ -s $TMP ]; then
echo ""
echo "Running calendar:"
cat $TMP
fi
rm -f $TMP
fi
if checkyesno check_uucp && \
[ -d /var/spool/uucp -a -f /usr/libexec/uucp/clean.daily ]; then
echo ""
echo "Cleaning up UUCP:"
su daemon -c /usr/libexec/uucp/clean.daily
fi
if checkyesno check_disks; then
if checkyesno show_remote_fs; then
df -hi -t nokernfs,procfs,null,fdesc > $TMP
else
df -hil -t nokernfs,procfs,null,fdesc > $TMP
fi
if [ -s /etc/dumpdates ] ; then
dump -W > $TMP2
fi
if [ -s $TMP -o -s $TMP2 ]; then
echo ""
echo "Checking subsystem status:"
echo ""
echo "disks:"
if [ -s $TMP ]; then
cat $TMP
echo ""
fi
if [ -s $TMP2 ]; then
cat $TMP2
echo ""
fi
echo ""
fi
rm -f $TMP $TMP2
touch $TMP2
for dev in `iostat -x | awk '/^raid/ { print $1 }'`; do
raidctl -s $dev | awk '/^.*: failed$/ {print $0}' > $TMP
if [ -s $TMP ]; then
echo "$dev:" >> $TMP2
cat $TMP >> $TMP2
fi
rm -f $TMP
done
if [ -s $TMP2 ]; then
echo "failed RAIDframe component(s):"
cat $TMP2
fi
rm -f $TMP2
fi
if checkyesno check_mailq; then
mailq > $TMP
if ! grep -q "queue is empty$" $TMP; then
echo ""
echo "mail:"
cat $TMP
fi
fi
rm -f $TMP
if checkyesno check_uucp && [ -d /var/spool/uucp ]; then
(cd /tmp; su -m uucp -c "uustat -a") > $TMP
if [ -s $TMP ]; then
echo ""
echo "uucp:"
cat $TMP
fi
fi
rm -f $TMP
if checkyesno check_network; then
echo ""
echo "network:"
if checkyesno full_netstat; then
netstat -inv
else
netstat -in | awk 'BEGIN {
ifs[""] = 0;
}
/^[^\*]* / {
if (NR == 1) {
printf("%-8s %10s %6s %10s %6s %6s\n",
$1, $(NF-4), $(NF-3), $(NF-2), $(NF-1), $NF);
next;
}
if (!($1 in ifs)) {
printf("%-8s %10d %6d %10d %6d %6d\n",
$1, $(NF-4), $(NF-3), $(NF-2), $(NF-1), $NF);
ifs[$1] = 1;
}
}'
fi
echo ""
t=/var/rwho/*
if [ "$t" != '/var/rwho/*' ]; then
ruptime
fi
fi
if checkyesno run_fsck; then
echo ""
echo "Checking filesystems:"
fsck -n -f | grep -v '^\*\* Phase'
fi
echo ""
if checkyesno run_rdist && [ -f /etc/Distfile ]; then
echo "Running rdist:"
if [ -d /var/log/rdist ]; then
logf=`date +%Y.%b.%d`
rdist -f /etc/Distfile 2>&1 | tee /var/log/rdist/$logf
else
rdist -f /etc/Distfile
fi
fi
if checkyesno run_security; then
SECOUT="$DAILYDIR/sec"
sh /etc/security > "$SECOUT" 2>&1
if [ ! -s "$SECOUT" ]; then
if checkyesno send_empty_security; then
echo "Nothing to report on $date" > "$SECOUT"
else
echo ""
echo "Suppressing empty security report."
fi
fi
if [ -s "$SECOUT" ]; then
mail -s "$host daily insecurity output for $date" \
$MAILTO < "$SECOUT"
fi
fi
if checkyesno run_skeyaudit; then
if [ -s /etc/skeykeys ]; then
echo ""
echo "Checking remaining s/key OTPs:"
skeyaudit
fi
fi
if [ -f /etc/daily.local ]; then
echo ""
echo "Running /etc/daily.local:"
. /etc/daily.local
fi