forked from pool/cronic
Fixed license string, as requested. OBS-URL: https://build.opensuse.org/request/show/247453 OBS-URL: https://build.opensuse.org/package/show/utilities/cronic?expand=0&rev=1
146 lines
4.3 KiB
Groff
146 lines
4.3 KiB
Groff
.TH cronic 1 "April 2013" "habilis.net" "User Commands"
|
|
|
|
.SH NAME
|
|
cronic - a cure for Cron's chronic email problem
|
|
.SH SYNOPSIS
|
|
.B cronic
|
|
[COMMAND]
|
|
.P
|
|
The Disease:
|
|
.RS
|
|
0 1 * * * backup >/dev/null 2>&1
|
|
.RE
|
|
.P
|
|
The Cure:
|
|
.RS
|
|
0 1 * * * cronic backup
|
|
.RE
|
|
.SH DESCRIPTION
|
|
Cronic is a shell script to help control the most annoying feature of cron:
|
|
unwanted emailed output, or "cram" (cron spam). If the Unix Haters list was
|
|
still active, I would submit the rant below to gain membership.
|
|
.SS
|
|
The Disease
|
|
One of the best features of cron is its automatic email - it is also its worst
|
|
feature. Cron automatically emails the output of a cron job to the user. On the
|
|
face of it, this sounds like a great idea. Cron jobs can run automatically in
|
|
the background for months at a time - so getting an email when a problem occurs
|
|
sounds useful.
|
|
.P
|
|
Unfortunately, cron's idea of "output" is simultaneously too broad and too
|
|
narrow to actually be useful. Cron considers
|
|
.I any
|
|
output to be significant - including standard output. This interacts badly with
|
|
many unix commands, which often send status info to standard out. Some commands
|
|
have a quiet options, but that can turn off all error output too. To make
|
|
matters worse, cron
|
|
.I ignores
|
|
command result codes, meaning that errors from quiet programs are ignored.
|
|
.P
|
|
It is almost impossible to create a non-trivial cron job that is quiet
|
|
enough to run without output, but still reports all errors. Following
|
|
the principle of "Worse is Better", the typical solution is
|
|
to sweep it all under the carpet by redirecting all output to /dev/null,
|
|
and hoping for the best:
|
|
.P
|
|
.RS
|
|
0 1 * * * backup >/dev/null 2>&1
|
|
.RE
|
|
.P
|
|
Now when your cron job fails, you will never know about it. Using cron
|
|
to backup your files? Sorry, the cron job has been failing due to
|
|
permission errors for months - all your files are gone.
|
|
.P
|
|
Could cron be fixed? Although almost all current implementation of cron are
|
|
open source, cron's pathological behavior has been petrified into the Unix
|
|
standards. So if it isn't broken, it isn't cron. The only solution left is a
|
|
work-around.
|
|
.SS
|
|
The Cure: Cronic
|
|
Cronic is a small shim shell script for wrapping cron jobs so that cron only
|
|
sends email when an error has occurred. Cronic defines an error as any
|
|
non-trace error output or a non-zero result code. Cronic filters Bash execution
|
|
traces (or anything matching PS4) from the error output, so jobs can be run with
|
|
execution tracing to aid forensic debugging. Cronic has no options, it simply
|
|
executes its arguments.
|
|
.P
|
|
.RS
|
|
0 1 * * * cronic backup
|
|
.RE
|
|
.P
|
|
With cronic, you can turn on Bash's strict error handling and debug
|
|
options (exit on error, unset variable detection and execution tracing
|
|
to make sure problems are caught early. For example:
|
|
.P
|
|
.RS
|
|
.nf
|
|
#!/bin/bash
|
|
|
|
set -o errexit -o nounset -o xtace
|
|
|
|
cp -rp data1 /backup
|
|
cp -rp data2 /backup
|
|
cp -rp data3 /backup
|
|
.fi
|
|
.RE
|
|
.P
|
|
When an error is detected, Cronic outputs a report listing the result
|
|
code, error output, and combined trace and error output. The combined
|
|
output can help put error messages in context. An example:
|
|
.P
|
|
.RS
|
|
.nf
|
|
From: user@example.net (Cron Daemon)
|
|
To: user@example.net
|
|
Subject: Cron <user@server> cronic backup
|
|
|
|
Cronic detected failure or error output for the command:
|
|
backup
|
|
|
|
RESULT CODE: 1
|
|
|
|
ERROR OUTPUT:
|
|
cp: data2: Permission denied
|
|
|
|
STANDARD OUTPUT:
|
|
|
|
TRACE-ERROR OUTPUT:
|
|
+ cp -rp data1 /backup
|
|
+ cp -rp data2 /backup
|
|
cp: data2: Permission denied
|
|
.fi
|
|
.RE
|
|
.SH HISTORY
|
|
.TP 8
|
|
v2
|
|
Corrected command evaluation, so shell meta-chars are preserved correctly (Thanks to Frank Wallingford for the fix).
|
|
.TP
|
|
v1
|
|
Initial release.
|
|
.SH AUTHOR
|
|
Chuck Houpt
|
|
<http://habilis.net/cronic/>
|
|
.SH BUGS
|
|
Feedback to: chuck@habilis.net
|
|
.SH RELATED PROJECTS
|
|
Cronic isn't the only cure for cron. Cronic's main advantage it is
|
|
small, simple and a shell script. There are several C-based cron wrapper
|
|
programs with many additional capabilities and options:
|
|
.SS Shush
|
|
A C-based cron wrapper, with multiple report formats, syslogging, etc.
|
|
.br
|
|
<http://web.taranis.org/shush/>
|
|
.SS Cronwrap
|
|
A C-based cron wrapper, with time-out control, logging, etc.
|
|
.br
|
|
<http://www.uow.edu.au/~sah/cronwrap.html>
|
|
.SH SEE ALSO
|
|
.SS Cron
|
|
<http://en.wikipedia.org/wiki/Cron>
|
|
.br
|
|
<http://www.opengroup.org/onlinepubs/009695399/utilities/crontab.html>
|
|
.SS "Unix Haters"
|
|
<http://www.mindspring.com/~blackhart/>
|
|
.SS "Worse is Better"
|
|
<http://www.jwz.org/doc/worse-is-better.html>
|