Update how accounting log files are rotated.
The old version had a race between the time that the old file was cp'ed to acct.0 and the time that 'sa -s' was run that prevented the commands that occurred in the meantime from being backed up. It's also arguable that the old version was inefficient in using cp which can be a problem on a space-constrained system. This version avoids both problems, albeit it's considerably more complicated. The advantage of putting the log rotation in the rc.d script is that it can handle the _enable and _file questions without having to do gymnastics to discover either value in the periodic script. As a side effect of reviewing the rc.d script I cleaned it up a bit.
This commit is contained in:
parent
6fd359f8f4
commit
0a6cd3ac6d
@ -41,13 +41,16 @@ case "$daily_accounting_enable" in
|
||||
m=$n
|
||||
n=$(($n - 1))
|
||||
done
|
||||
cp -pf acct acct.0 || rc=3
|
||||
sa -s $daily_accounting_flags || rc=3
|
||||
|
||||
/etc/rc.d/accounting rotate_log || rc=3
|
||||
|
||||
case "$daily_accounting_compress" in
|
||||
[Yy][Ee][Ss])
|
||||
gzip -f acct.0 || rc=3;;
|
||||
gzip --keep -f acct.0 || rc=3;;
|
||||
esac
|
||||
|
||||
sa -s $daily_accounting_flags /var/account/acct.0 &&
|
||||
unlink acct.0 || rc=3
|
||||
fi;;
|
||||
|
||||
*) rc=0;;
|
||||
|
@ -14,28 +14,31 @@ name="accounting"
|
||||
rcvar=`set_rcvar`
|
||||
accounting_command="/usr/sbin/accton"
|
||||
accounting_file="/var/account/acct"
|
||||
|
||||
extra_commands="rotate_log"
|
||||
|
||||
start_cmd="accounting_start"
|
||||
stop_cmd="accounting_stop"
|
||||
rotate_log_cmd="accounting_rotate_log"
|
||||
|
||||
accounting_start()
|
||||
{
|
||||
local _dir
|
||||
|
||||
_dir=`dirname "$accounting_file"`
|
||||
if [ ! -d `dirname "$_dir"` ]; then
|
||||
_dir="${accounting_file%/*}"
|
||||
if [ ! -d "$_dir" ]; then
|
||||
if ! mkdir -p "$_dir"; then
|
||||
warn "Could not create $_dir."
|
||||
return 1
|
||||
err 1 "Could not create $_dir."
|
||||
fi
|
||||
fi
|
||||
if [ ! -e "$accounting_file" ]; then
|
||||
touch "$accounting_file"
|
||||
fi
|
||||
|
||||
if [ ! -f ${accounting_file} ]; then
|
||||
echo "Creating accounting file ${accounting_file}"
|
||||
( umask 022 ; > ${accounting_file} )
|
||||
if [ ! -e "$accounting_file" ]; then
|
||||
echo -n "Creating accounting file ${accounting_file}"
|
||||
touch "$accounting_file"
|
||||
echo '.'
|
||||
fi
|
||||
chmod 644 "$accounting_file"
|
||||
|
||||
echo "Turning on accounting."
|
||||
${accounting_command} ${accounting_file}
|
||||
}
|
||||
@ -46,5 +49,26 @@ accounting_stop()
|
||||
${accounting_command}
|
||||
}
|
||||
|
||||
accounting_rotate_log()
|
||||
{
|
||||
local _dir _file
|
||||
|
||||
_dir="${accounting_file%/*}"
|
||||
cd $_dir
|
||||
|
||||
if checkyesno accounting_enable; then
|
||||
_file=`mktemp newacct-XXXXX`
|
||||
${accounting_command} ${_dir}/${_file}
|
||||
fi
|
||||
|
||||
mv ${accounting_file} ${accounting_file}.0
|
||||
|
||||
if checkyesno accounting_enable; then
|
||||
ln $_file ${accounting_file##*/}
|
||||
${accounting_command} ${accounting_file}
|
||||
unlink $_file
|
||||
fi
|
||||
}
|
||||
|
||||
load_rc_config $name
|
||||
run_rc_command "$1"
|
||||
|
Loading…
Reference in New Issue
Block a user