[RFC] DCD checkfreespace() vs. multiple filesystems
There has been some debate regarding /etc/cron.daily/multicron-d and one
of its functions, checkfreespace(), the default configuration for which
does *not* recognize nor act on multiple filesystems.
What follows is my proposed modification to that one function and a
change in the purge list paradigm for /etc/lrp.conf, which completely
resolves this challenge.
First, currently, /etc/lrp.conf contains this, by default:
lrp_SC_DEL_L1="/var/log/*[4-9].gz"
lrp_SC_DEL_L2="/var/log/*[1-3].gz"
lrp_SC_DEL_L3="/var/log/*.gz"
lrp_SC_DEL_L4="/var/log/*.0"
lrp_SC_DEL_L5="/var/log/wtmp"
I propose *replacing* those with the likes of these:
purge_ram0_L1="/tmp/*"
purge_ram0_L2="/var/cache/*[1-9].gz"
purge_ram0_L3="/var/cache/*.gz"
purge_ram0_L4="/var/cache/*.0"
purge_ram0_L5="/var/cache/*"
purge_ram1_L1="/var/log/*[4-9].gz"
purge_ram1_L2="/var/log/*[1-3].gz"
purge_ram1_L3="/var/log/*.gz"
purge_ram1_L4="/var/log/*.0"
purge_ram1_L5="/var/log/wtmp"
Notice, each ramdisk now *must* be configured separately for the five
(5) purge levels.
The new checkfreespace() automatically checks *ALL* filesystems known to
`df'. Currently, in DCD, all of these must take the following form:
/dev/ramX
where X is some number from 0 to an unidentified upper limit. Need we
account for mounted cdrom and floppy?
/etc/cron.daily/multicron-d -- proposed modification to function [Beware
of inadvertent line wrap!]:
checkfreespace () {
ckfree () {
[ $bfree -le ${lrp_SC_MINKB:--1} ] && return 1
[ $pfree -le ${lrp_SC_MINPER:-101} ] && return 1
return 0
}
cleanlevel () {
eval F="\$purge_$@_L$cklevel"
for f in $F
do
[ ! -f "$f" ] && continue # Bug in expansion?
: > $f
done
}
mailspacelow () {
{
echo
echo "date: $(date)"
echo "src : $HOSTNAME"
echo "filesystem: /dev/$@"
echo "level: $cklevel freeKB: $bfree free%: $pfree"
echo
} | mailadmin "Freespace Low!"
}
updatefree () {
IFS="$SP$TAB%"
set -- $(df /dev/$@ | sed -n 2p)
IFS=$OIFS
bfree=$4
pfree=$((100 - $5))
}
[ "$lrp_SPACECHECK" != "YES" ] && return 0
# NOTE: *BOTH* character classes contain *both* space and tab !?!?
fslist=`df | sed '1d;s!^/dev/\([^ ]*\)[ ]*.*$!\1!'`
for fs in $fslist
do
cklevel=0
while [ $cklevel -lt 5 ]
do
updatefree $fs
ckfree && break
cklevel=$(($cklevel + 1))
cleanlevel $fs
done
[ $cklevel -ge ${lrp_SC_MAIL_LEVEL:-1} ] && mailspacelow $fs
done
log checkfreespace
}
What do you think?
--
Best Regards,
mds
mds resource
888.250.3987
Dare to fix things before they break . . .
Our capacity for understanding is inversely proportional to how much we
think we know. The more I know, the more I know I don't know . . .
_______________________________________________
Leaf-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/leaf-devel