# logrotate - rotate Upstart job log files to conserve disk space.
#
# Currently runs automatically 1 minute after session starts (to give
# jobs a chance to settle). However, can be run manually any time using
# 'start logrotate' to force logs to be rotated in low-disk space
# scenarios.

description "Rotate job log files"

start on startup or :sys:rotate-logs

task

pre-start script

logrotate=$(command -v logrotate 2>/dev/null || :)

# logrotate is not installed
[ -z "$logrotate" ] && exit 0

# started by event, so run logrotate normally
[ -n "$UPSTART_EVENTS" ] && exit 0

# started manually, so force a rotation
initctl set-env FORCE=--force

end script

script

# started by event, so allow time for main jobs to settle
[ -n "$UPSTART_EVENTS" ] && [ "$UPSTART_EVENTS" = startup ] && sleep 60

statedir=${XDG_CACHE_HOME:-$HOME/.cache}/logrotate
statefile="$statedir/status"

logdir=${XDG_CACHE_HOME:-$HOME/.cache}/upstart

mkdir -p "$statedir" || :
mkdir -p "$logdir" || :

conf=$(mktemp)

cat <<EOF >$conf
"$logdir/*.log" {
        hourly
        missingok
        rotate 7
        compress
        notifempty
        nocreate
}
EOF

logrotate $FORCE -s "$statefile" "$conf" || :
rm -f "$conf"
end script
