xref: /freebsd/usr.sbin/periodic/etc/daily/310.accounting (revision d0b2dbfa0ecf2bbc9709efc5e20baf8e4b44bbbf)
181ea85a8SBrad Davis#!/bin/sh
281ea85a8SBrad Davis#
381ea85a8SBrad Davis#
481ea85a8SBrad Davis
581ea85a8SBrad Davis# If there is a global system configuration file, suck it in.
681ea85a8SBrad Davis#
781ea85a8SBrad Davisif [ -r /etc/defaults/periodic.conf ]
881ea85a8SBrad Davisthen
981ea85a8SBrad Davis    . /etc/defaults/periodic.conf
1081ea85a8SBrad Davis    source_periodic_confs
1181ea85a8SBrad Davisfi
1281ea85a8SBrad Davis
1381ea85a8SBrad Daviscase "$daily_accounting_enable" in
1481ea85a8SBrad Davis    [Yy][Ee][Ss])
1581ea85a8SBrad Davis	if [ ! -f /var/account/acct ]
1681ea85a8SBrad Davis	then
1781ea85a8SBrad Davis	    echo '$daily_accounting_enable is set but /var/account/acct' \
1881ea85a8SBrad Davis		"doesn't exist"
1981ea85a8SBrad Davis	    rc=2
20*9ab40bc4SJohn Grafton	elif [ $(sysctl -n kern.acct_configured) -eq 0 ]
21*9ab40bc4SJohn Grafton	then
22*9ab40bc4SJohn Grafton	    echo '$daily_accounting_enable is set but' \
23*9ab40bc4SJohn Grafton	    'process accounting is not active'
24*9ab40bc4SJohn Grafton	    rc=2
2581ea85a8SBrad Davis	elif [ -z "$daily_accounting_save" ]
2681ea85a8SBrad Davis	then
2781ea85a8SBrad Davis	    echo '$daily_accounting_enable is set but ' \
2881ea85a8SBrad Davis		'$daily_accounting_save is not'
2981ea85a8SBrad Davis	    rc=2
3081ea85a8SBrad Davis	else
3181ea85a8SBrad Davis	    echo ""
3281ea85a8SBrad Davis	    echo "Rotating accounting logs and gathering statistics:"
3381ea85a8SBrad Davis
3481ea85a8SBrad Davis	    cd /var/account
3581ea85a8SBrad Davis	    rc=0
3681ea85a8SBrad Davis
3781ea85a8SBrad Davis	    n=$(( $daily_accounting_save - 1 ))
3881ea85a8SBrad Davis	    for f in acct.*; do
3981ea85a8SBrad Davis	    	case "$f" in acct.\*) continue ;; esac	# No files match
4081ea85a8SBrad Davis	    	m=${f%.gz} ; m=${m#acct.}
4181ea85a8SBrad Davis		[ $m -ge $n ] && { rm $f || rc=3; }
4281ea85a8SBrad Davis	    done
4381ea85a8SBrad Davis
4481ea85a8SBrad Davis	    m=$n
4581ea85a8SBrad Davis	    n=$(($n - 1))
4681ea85a8SBrad Davis	    while [ $n -ge 0 ]
4781ea85a8SBrad Davis	    do
4881ea85a8SBrad Davis		[ -f acct.$n.gz ] && { mv -f acct.$n.gz acct.$m.gz || rc=3; }
4981ea85a8SBrad Davis		[ -f acct.$n ] &&    { mv -f acct.$n acct.$m || rc=3; }
5081ea85a8SBrad Davis		m=$n
5181ea85a8SBrad Davis		n=$(($n - 1))
5281ea85a8SBrad Davis	    done
5381ea85a8SBrad Davis
54545151d1SIan Lepore	    /etc/rc.d/accounting onerotate_log || rc=3
5581ea85a8SBrad Davis
5681ea85a8SBrad Davis	    rm -f acct.merge && cp acct.0 acct.merge || rc=3
5781ea85a8SBrad Davis	    sa -s $daily_accounting_flags /var/account/acct.merge || rc=3
5881ea85a8SBrad Davis	    rm acct.merge
5981ea85a8SBrad Davis
6081ea85a8SBrad Davis	    case "$daily_accounting_compress" in
6181ea85a8SBrad Davis		[Yy][Ee][Ss])
6281ea85a8SBrad Davis		    gzip -f acct.0 || rc=3;;
6381ea85a8SBrad Davis	    esac
6481ea85a8SBrad Davis	fi;;
6581ea85a8SBrad Davis
6681ea85a8SBrad Davis    *)  rc=0;;
6781ea85a8SBrad Davisesac
6881ea85a8SBrad Davis
6981ea85a8SBrad Davisexit $rc
70