You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Croncape wraps commands run as cron jobs to send emails only when an error
or a timeout has occurred.
Out of the box, crontab can send an email when a job generates output. But
a command is not necessarily unsuccessful "just" because it used the standard
or error output. Checking the exit code would be better, but that's not how
crontab was standardized.
Croncape takes a different approach by wrapping your commands to only send an
email when the command returns a non-zero exit code.
Croncape plays well with crontab as it never outputs anything except when an
issue occurs in Croncape itself (like a misconfiguration for instance), in
which case crontab would send you an email.
Installation
Download the binaries or go install github.com/symfonycorp/croncape@latest.
Usage
When adding a command in crontab, prefix it with croncape:
MAILTO=sysadmins@example.com
0 6 * * * croncape ls -lsa
That's it!
Note that the MAILTO environment variable can also be defined globally in
/etc/crontab; it supports multiple recipients by separating them with a comma.
You can also customize the email sender by setting the MAILFROM environment
variable.
If you need to use "special" shell characters in your command (like ; or |),
don't forget to quote it and wrap the command in a shell:
0 6 * * * croncape bash -c "ls -lsa | true"
Besides sending emails, croncape can also kill the run command after a given
timeout, via the -t flag (disabled by default):
0 6 * * * croncape -t 2h ls -lsa
If you want to send emails even when commands are successful, use the -v flag
(useful for testing).
Use the -h flag to display the full help message.
Croncape is very similar to cronwrap, with some differences:
No dependencies (cronwrap is written in Python);
Kills a command on a timeout (cronwrap just reports that the command took
more time to execute);
Tries to use sendmail or mail depending on availability (cronwrap only
works with sendmail);
Reads the email from the standard crontab MAILTO environment variable
instead of a -e flag.