Why they fail quietly

Cron runs with a minimal environment and a different working directory to your shell. A script that works when you run it can fail under cron for path reasons alone, and the output goes nowhere by default.

Make failure loud

Log every run with a timestamp and exit code, alert when a job has not reported success within its expected window, and check the alert works by deliberately breaking a job once.

Guard against overlap

A job that occasionally runs long will eventually run twice at once. A lock file or a database advisory lock prevents the double-processing that causes duplicate invoices and repeated emails.