[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

Reply via email to