freebsd-skq/usr.sbin/periodic/etc/daily/310.accounting
ian fca80533ae Eliminate spurious periodic.daily error message for rotating accounting log.
In 2011, r218961 removed local code for rotating logs in favor of using the
rotate_log command in etc/rc.d/accounting.  If the accounting service is
activated then subsequently de-activated in rc.conf but still remains active
in periodic.conf, then you get an error message every day in the periodic
jobs about being unable to rotate the logs.

With this change to use "onerotate_log", the log rotation will happen the
first time periodic daily runs after accounting was disabled but periodic
accounting was left enabled.  After that happens once, the /var/account/acct
will no longer exist, which results in a different path through the periodic
code and no more error messages will appear (unless daily_show_badconfig is
set, in which case the admin will be told that periodic security processing
is enabled but the accounting file is not present).

This is only a partial fix for the problems reported in PR 202203.

PR:		202203
2019-07-07 17:15:45 +00:00

66 lines
1.4 KiB
Bash
Executable File

#!/bin/sh
#
# $FreeBSD$
#
# If there is a global system configuration file, suck it in.
#
if [ -r /etc/defaults/periodic.conf ]
then
. /etc/defaults/periodic.conf
source_periodic_confs
fi
case "$daily_accounting_enable" in
[Yy][Ee][Ss])
if [ ! -f /var/account/acct ]
then
echo '$daily_accounting_enable is set but /var/account/acct' \
"doesn't exist"
rc=2
elif [ -z "$daily_accounting_save" ]
then
echo '$daily_accounting_enable is set but ' \
'$daily_accounting_save is not'
rc=2
else
echo ""
echo "Rotating accounting logs and gathering statistics:"
cd /var/account
rc=0
n=$(( $daily_accounting_save - 1 ))
for f in acct.*; do
case "$f" in acct.\*) continue ;; esac # No files match
m=${f%.gz} ; m=${m#acct.}
[ $m -ge $n ] && { rm $f || rc=3; }
done
m=$n
n=$(($n - 1))
while [ $n -ge 0 ]
do
[ -f acct.$n.gz ] && { mv -f acct.$n.gz acct.$m.gz || rc=3; }
[ -f acct.$n ] && { mv -f acct.$n acct.$m || rc=3; }
m=$n
n=$(($n - 1))
done
/etc/rc.d/accounting onerotate_log || rc=3
rm -f acct.merge && cp acct.0 acct.merge || rc=3
sa -s $daily_accounting_flags /var/account/acct.merge || rc=3
rm acct.merge
case "$daily_accounting_compress" in
[Yy][Ee][Ss])
gzip -f acct.0 || rc=3;;
esac
fi;;
*) rc=0;;
esac
exit $rc