Like any large scale enterprise data service, not every data process happens in the clients or on the web. There are a number of tasks that are specialized and must be scheduled to run at daily, weekly or monthly intervals. These processes run via CRON under Linux or via the Windows scheduler. These include scheduled fine generation, catalog ingestion support, re-shelving support among others. In Linux, an example crontab follows:
# Evergreen crontab.example
# Author: Joe Atzberger, ESI
# Author: Bill Erickson, ESI
# This is an example of a crontab file for Debian. It may not work
# in other versions of crontab, like on Solaris 8 or BSD, for example.
# While similar in structure,
# this is NOT an example for cron (as root). Cron takes an extra
# argument per line to designate the user to run as. You could
# reasonably extrapolate the needed info from here though.
# WARNING: These jobs will do things like charge fines, send
# potentially VERY MANY emails to patrons and even debar offending
# users. DO NOT RUN OR SCHEDULE these jobs without being sure you
# really intend to. Make sure the relevant message templates are
# configured to your liking before scheduling messages to be sent.
# Except where indicated, these processes only need to run
# on 1 Evergreen server/brick.
# First, establish Evergreen ENV variables.
OPENILS = /openils
SRF_CORE = /openils/conf/opensrf_core.xml
EG_BIN_DIR = /openils/bin
# crontab format:
# m h dom mon dow command
# Run the hold targeter
*/15 * * * * . ~/.bashrc && $EG_BIN_DIR/hold_targeter.pl $SRF_CORE
# Run the hold thawer
5 0 * * * . ~/.bashrc && $EG_BIN_DIR/thaw_expired_frozen_holds.srfsh
# Generate fines
30 0 * * * . ~/.bashrc && $EG_BIN_DIR/fine_generator.pl $SRF_CORE
# Run the reshelving completer
2 0 * * * . ~/.bashrc && $EG_BIN_DIR/reshelving_complete.srfsh
# create the list of blocked patrons for offline use
# Note: The resulting list.txt file needs to be copied to all Apache servers
30 6 * * * . ~/.bashrc && $EG_BIN_DIR/offline-blocked-list.pl $SRF_CORE > $OPENILS/var/web/standalone/list.txt
# Restart SIP nightly to free up any orphaned processes.
# Note: Run on all SIP servers
# 5 2 * * * . ~/.bashrc && oils_ctl.sh -d $OPENILS/var/pid -s $OPENILS/conf/oils_sip.xml -a stop_sip
# 8 2 * * * . ~/.bashrc && oils_ctl.sh -d $OPENILS/var/pid -s $OPENILS/conf/oils_sip.xml -a start_sip
# Action/Trigger entries —-
# Runs all pending A/T events every half hour
*/30 * * * * . ~/.bashrc && $EG_BIN_DIR/action_trigger_runner.pl –osrf-config $SRF_CORE –run-pending
# Passive A/T event generation.
# Note: the –granularity flag is not supported in 1.6
# Note: push these back to 3am so they will run after the fine generator and spread out the start minute to reduce dogpiling
0 * * * * . ~/.bashrc && $EG_BIN_DIR/action_trigger_runner.pl –osrf-config $SRF_CORE –process-hooks –granularity hourly
5 3 * * * . ~/.bashrc && $EG_BIN_DIR/action_trigger_runner.pl –osrf-config $SRF_CORE –process-hooks –granularity daily
10 3 * * 1-5 . ~/.bashrc && $EG_BIN_DIR/action_trigger_runner.pl –osrf-config $SRF_CORE –process-hooks –granularity weekdays
15 3 * * 0 . ~/.bashrc && $EG_BIN_DIR/action_trigger_runner.pl –osrf-config $SRF_CORE –process-hooks –granularity weekly
20 3 1 * * . ~/.bashrc && $EG_BIN_DIR/action_trigger_runner.pl –osrf-config $SRF_CORE –process-hooks –granularity monthly
25 3 1 1 * . ~/.bashrc && $EG_BIN_DIR/action_trigger_runner.pl –osrf-config $SRF_CORE –process-hooks –granularity yearly
# Legacy overdue/predue notice generator. Change to suit.
#XML_FILE_PREFIX = /openils/var/data/overdue/overdue
#0 3 * * * . ~/.bashrc && cd $EG_BIN_DIR && ./generate_circ_notices.pl –osrf_config $SRF_CORE –notice-types overdue,predue –generate-global-templates –send-email > $XML_FILE_PREFIX.$(date +“\%F”).xml
# TODO: add other entries
There are many useful sites on the internet that extend what man teaches you about using CRON if you need it. Just search on “crontab examples” for a current list.