Skip to content

symfonycorp/croncape

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Croncape

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.

For a simpler alternative, have a look at cronic.