How do I run scheduled tasks (cron jobs) on Enclave?

On Enclave, cron jobs are typically run as another service associated with your app, defined in your App’s Procfile, or running as a separate App altogether.

To run cron jobs on Enclave (or any containerized environment), we recommend using Supercronic, a cron implementation we created specifically to be used with containers.

Here’s how you’d get started running cron jobs for your app with Supercronic.

Add Supercronic

Install Supercronic in your Docker image.

Write a crontab

First, add a crontab to your repository. Here is an example crontab you might want to adapt or reuse:

# Run every minute
*/1 * * * * bundle exec rake some:task

# Run once every hour
@hourly curl -sf example.com >/dev/null && echo 'got example.com!'

Note

For a complete crontab reference, review the documentation from the library Supercronic uses to parse crontabs, cronexpr.

Tip

Unless you’ve specified otherwise with the TZ environment variable the schedule for your crontab will be interpeted in UTC.

Copy the crontab to your Docker image

Then, make sure the crontab copied in your Docker image, with a directive such as this one:

ADD crontab /app/crontab

Note

The example above grabs a file named crontab found at the root of your repository, and copies it under /app in your image.

Adjust as needed.

Add a new Service or App running Supercronic

Finally, add a new service (if your app already has a Procfile), or deploy a new app altogether to start Supercronic and run your cron jobs:

If you are adding a service, use this Procfile declaration:

cron: exec supercronic /app/crontab

If you are adding a new app, you can use the same Procfile declaration, or add a CMD declaration to your Dockerfile:

CMD ["supercronic", "/app/crontab"]