• Stars
    star
    143
  • Rank 257,007 (Top 6 %)
  • Language
    Go
  • License
    MIT License
  • Created almost 8 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Croncape wraps commands run as cron jobs to send emails only when an error or a timeout has occurred.

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:

[email protected]
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.