Thought I might share my new favourite utility, wday.

So I've got a script that's launched by cron every Monday. It emails
reminders to all users who haven't sent a progress report for the
previous week. Simple.

Amongst other changes to be done, I was asked if this system could be
modified so, if Monday is a public holiday, reminders aren't sent until
Tuesday. Sounds simple, but I knew of no way to easily tell if a given
day was a public holiday. Debian didn't seem to have anything
pre-packaged, and I was starting to despair of evil calendar(1)
chicanery, or having to hard-code a list of exception dates in to the
script.

Eventually found mday (http://www.nongnu.org/wday/) while googling for
alternative cron daemons that might be able to do it. Has a quiet mode,
that'll return 1 for a weekday or 0 for a weekend/public holiday, can
check today or any arbitrary date you feed it. The data for NSW seems
fairly complete (checked the output of wday -l against
http://www.industrialrelations.nsw.gov.au/holidays/ ), and the data
files are easily extensible to deal with things like uni holidays.
Perfect!

So I've changed Monday's job to call wday before running the script, and
added a second job on Tuesday, that will only run if the previous day
was a public holiday.

# Progress report annoyances.
# Only send on Monday if it isn't a public holiday
30 10   * * 1   benno   /usr/bin/wday -q || python /home/disy/progress_annoy.py
# Only send on Tuesday if Monday was a public holiday
30 10   * * 2   benno   /usr/bin/wday -q `/bin/date -d yesterday +%Y%m%d` && python 
/home/disy/progress_annoy.py

Brilliant!

-- 
Pete

-- 
SLUG - Sydney Linux User's Group Mailing List - http://slug.org.au/
Subscription info and FAQs: http://slug.org.au/faq/mailinglists.html

Reply via email to