Ping

Cron Jobs Integration

Notify when scheduled tasks complete.


Basic Usage

In your crontab (crontab -e):

Terminal
# Daily backup at 2 AM
0 2 * * * /path/to/backup.sh && curl -s -X POST 'YOUR_WEBHOOK_URL' -H 'Content-Type: application/json' -d '{"title": "Backup Complete"}'

# Weekly report on Sundays
0 9 * * 0 /path/to/report.sh && curl -s -X POST 'YOUR_WEBHOOK_URL' -H 'Content-Type: application/json' -d '{"title": "Weekly Report Generated"}'

# With error notification
0 3 * * * /path/to/job.sh || curl -s -X POST 'YOUR_WEBHOOK_URL' -H 'Content-Type: application/json' -d '{"title": "Cron Job Failed", "priority": "high"}'

Preview

Backup Complete

just now

Success and Failure Notifications

Notify on both success and failure with different messages:

Terminal
0 2 * * * /path/to/backup.sh && curl -s -X POST 'YOUR_URL' -H 'Content-Type: application/json' -d '{"title": "✅ Backup Complete"}' || curl -s -X POST 'YOUR_URL' -H 'Content-Type: application/json' -d '{"title": "❌ Backup Failed", "priority": "high"}'

Preview

✅ Backup Complete

just now

Using a Wrapper Script

Create /usr/local/bin/notify-cron:

Terminal
#!/bin/bash

PING_URL="${PING_WEBHOOK_URL}"
JOB_NAME="$1"
shift
CMD="$*"

# Run the command
OUTPUT=$($CMD 2>&1)
EXIT_CODE=$?

if [ $EXIT_CODE -eq 0 ]; then
  curl -s -X POST "$PING_URL" \
    -H 'Content-Type: application/json' \
    -d "{\"title\": \"✅ $JOB_NAME\", \"body\": \"Completed successfully\"}"
else
  curl -s -X POST "$PING_URL" \
    -H 'Content-Type: application/json' \
    -d "{\"title\": \"❌ $JOB_NAME Failed\", \"body\": \"Exit code: $EXIT_CODE\n$OUTPUT\", \"priority\": \"high\"}"
fi

exit $EXIT_CODE

Make it executable:

Terminal
chmod +x /usr/local/bin/notify-cron

Use in crontab:

Terminal
0 2 * * * PING_WEBHOOK_URL='YOUR_URL' /usr/local/bin/notify-cron "Daily Backup" /path/to/backup.sh
0 4 * * * PING_WEBHOOK_URL='YOUR_URL' /usr/local/bin/notify-cron "Log Rotation" /path/to/rotate-logs.sh

Systemd Timers Alternative

For more robust scheduling, use systemd timers:

# /etc/systemd/system/backup.service
[Unit]
Description=Daily Backup
After=network.target

[Service]
Type=oneshot
ExecStart=/path/to/backup.sh
ExecStartPost=/usr/bin/curl -s -X POST 'YOUR_WEBHOOK_URL' -H 'Content-Type: application/json' -d '{"title": "Backup Complete"}'

Preview

Backup Complete

just now
# /etc/systemd/system/backup.timer
[Unit]
Description=Daily Backup Timer

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true

[Install]
WantedBy=timers.target

Enable with:

Terminal
systemctl enable --now backup.timer