# mounted-tmp - Clean /tmp directory
#
# Cleans up the /tmp directory when it does not exist as a temporary
# filesystem.

description	"Clean /tmp directory"

start on (mounted MOUNTPOINT=/tmp) or (mounted MOUNTPOINT=/usr)
# The "/tmp" here is just a default and is overridden by the "start on"
# case above. It protects someone from running this job directly and
# having no $MOUNTPOINT defined.
env MOUNTPOINT=/tmp

task

script
    if [ x$MOUNTPOINT = x/tmp ] && [ ! -x /usr/bin/find ] ; then
        touch /tmp/.delayed_mounted_tmp_clean
        exit 0
    elif [ x$MOUNTPOINT = x/usr ] ; then
        [ -f /tmp/.delayed_mounted_tmp_clean ] || exit 0
        rm /tmp/.delayed_mounted_tmp_clean
        MOUNTPOINT=/tmp
    fi

    . /etc/default/rcS

    cd "${MOUNTPOINT}" || exit 1
    rm -f .X*-lock

    case "${TMPTIME}" in
        -*|infinite|infinity)
	    exit 0
	    ;;
    esac

    if [ "${TMPTIME}" = "0" -o -z "${TMPTIME}" ]
    then
	TEXPR=""
	DEXPR=""
    else
	TEXPR="-mtime +${TMPTIME} -ctime +${TMPTIME} -atime +${TMPTIME}"
	DEXPR="-mtime +${TMPTIME} -ctime +${TMPTIME}"
    fi

    EXCEPT='! -name .
            ! ( -path ./lost+found -uid 0 )
            ! ( -path ./quota.user -uid 0 )
            ! ( -path ./aquota.user -uid 0 )
            ! ( -path ./quota.group -uid 0 )
            ! ( -path ./aquota.group -uid 0 )
            ! ( -path ./.journal -uid 0 )
            ! ( -path ./.clean -uid 0 )
            ! ( -path "./...security*" -uid 0 )'

    # Remove all old files, then all empty directories
    find . -depth -xdev $TEXPR $EXCEPT ! -type d -delete
    find . -depth -xdev $DEXPR $EXCEPT -type d -empty -delete

    # Check if we have enough space in /tmp, and if not, mount a tmpfs there
    avail=`df -kP /tmp | awk 'NR==2 { print $4 }'`
    if [ "$avail" -lt 1000 ]; then
	mount -t tmpfs -o size=1048576,mode=1777 overflow /tmp
    fi
end script
