Files
2026-07-24 06:35:15 +08:00

1.8 KiB

VPS Cron Jobs — ims.setia.com.my

App binds to 127.0.0.1:3003. All cron calls hit that directly (no nginx proxy overhead). CRON_SECRET is in /var/www/ims/.env.

CAPA Overdue Escalation

Runs daily at 08:00 MYT (00:00 UTC). Checks all open CAPAs against 4 thresholds (warning_3d, due_today, overdue_3d, overdue_7d) and sends email via Brevo. Each threshold fires once per CAPA, tracked in notifications_log.status.

Install (SSH into server, then):

crontab -e

Add:

0 0 * * * CRON_SECRET=$(grep ^CRON_SECRET /var/www/ims/.env | cut -d= -f2) curl -s -H "Authorization: Bearer $CRON_SECRET" http://127.0.0.1:3003/api/cron/capa-escalation >> /var/log/ims-cron.log 2>&1

Manual test:

CRON_SECRET=$(grep ^CRON_SECRET /var/www/ims/.env | cut -d= -f2)
curl -s -H "Authorization: Bearer $CRON_SECRET" http://127.0.0.1:3003/api/cron/capa-escalation
# Expected: {"ok":true,"notified":N}

CAPA Effectiveness Recheck

Runs daily at 08:30 MYT (00:30 UTC). Re-evaluates CAPAs marked pending_verification past their recheck date and sends reminder email to the assigned verifier via Brevo.

Install: Add to crontab (same crontab -e session):

30 0 * * * CRON_SECRET=$(grep ^CRON_SECRET /var/www/ims/.env | cut -d= -f2) curl -s -H "Authorization: Bearer $CRON_SECRET" http://127.0.0.1:3003/api/cron/effectiveness-recheck >> /var/log/ims-cron.log 2>&1

Manual test:

CRON_SECRET=$(grep ^CRON_SECRET /var/www/ims/.env | cut -d= -f2)
curl -s -H "Authorization: Bearer $CRON_SECRET" http://127.0.0.1:3003/api/cron/effectiveness-recheck
# Expected: {"ok":true}

Log Rotation

Prevent /var/log/ims-cron.log from growing unbounded:

sudo nano /etc/logrotate.d/ims-cron

Paste:

/var/log/ims-cron.log {
    daily
    rotate 30
    compress
    missingok
    notifempty
}