#!/bin/bash
# No way I try to deal with a crippled sh just for POSIX foo.
-# Copyright (C) 2009-2015 Joerg Jaspert <joerg@debian.org>
+# Copyright (C) 2009-2016 Joerg Jaspert <joerg@debian.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# the important part here)
set -E
-# The extglob shell option is enabled using the shopt builtin, several
-# extended pattern matching operators are recognized. We use it for
-# the POSSIBLEARGS and the first case ${ARGS} matching
+# If the extglob shell option is enabled using the shopt builtin,
+# several extended pattern matching operators are recognized. We use
+# it for the POSSIBLEARGS and the first case ${ARGS} matching.
shopt -s extglob
# And use one locale, no matter what the caller has set
# program name is the (lower cased) first argument.
PROGRAM="${ARG}"
-# And the following types of cronscripts exists
-declare -lr POSSIBLEARGS='+(unchecked|dinstall|hourly|daily|weekly|monthly|yearly)'
-
# set DEBUG if you want to see a little more logs (needs to be used more)
DEBUG=${DEBUG:-0}
;;
*)
cat - <<EOF
-This is the FTPMaster cronscript. It needs an argument or it won't do
-anything for you.
+This is the cronscript. It needs an argument or it won't do anything
+for you.
-Currently accepted Arguments:
+Currently accepted Arguments: ${POSSIBLEARGS}
- unchecked - Process the unchecked queue
- dinstall - Run a dinstall
- yearly, hourly, daily, weekly - Run that part
+To see what they do, you want to look at the files
+\$ARGUMENT.{tasks,functions,variables} in ${configdir}.
EOF
exit 0
# Get rid of tempfiles at the end
trap cleanup EXIT TERM HUP INT QUIT
- case ${ARG} in
- unchecked)
- # Do not run during dinstall
- if [[ -e ${LOCK_DAILY} ]]; then
- exit 0;
- fi
- # only run one cron.unchecked and also lock against hourly (newoverview)
- if ! lockfile -r8 ${LOCK_UNCHECKED} 2> /dev/null; then
- # log "aborting cron.unchecked because $LOCK_UNCHECKED has already been locked"
- exit 0
- fi
- TMPFILES="${TMPFILES} ${LOCK_UNCHECKED}"
- ;;
- dinstall)
- ;;
- hourly)
- ;;
- daily)
- ;;
- weekly)
- ;;
- monthly)
- ;;
- yearly)
- ;;
- *)
- error "Unknown arg ${ARG}"
- exit 42
- ;;
- esac
+ # If there is a precronscript function, we run it.
+ prefunc=$(type -t precronscript || echo "")
+ if [[ -n ${prefunc} ]] && [[ ${prefunc} = function ]]; then
+ precronscript
+ fi
# An easy access by name for the current log
ln -sf ${LOGFILE} ${logdir}/${PROGRAM}
# we need to wait for the background processes before the end of the cron script
wait
-
# Common to all cron scripts
log "Cron script successful, all done"
# Redirect output to another file, as we want to compress our logfile
# and ensure its no longer used
exec > "$logdir/after${PROGRAM}.log" 2>&1
- case ${ARG} in
- unchecked)
- ;;
- dinstall)
- logstats ${LOGFILE}
- state "all done"
- touch "${DINSTALLEND}"
- ;;
- hourly)
- ;;
- daily)
- ;;
- weekly)
- ;;
- monthly)
- ;;
- yearly)
- ;;
- esac
+ # If there is a postcronscript function, we run it.
+ postfunc=$(type -t postcronscript || echo "")
+ if [[ -n ${postfunc} ]] && [[ ${postfunc} = function ]]; then
+ postcronscript
+ fi
# Now, at the very (successful) end of this run, make sure we remove
# our stage files, so the next dinstall run will do it all again.