cron-tz-shared-crontab-risk
CRON_TZ in shared root crontab retroactively shifts ALL existing jobs
During R-TaskFlow M10.T1 (2026-04-17), the spec asked for CRON_TZ=Asia/Kolkata + 30 2 * * * to install a 02:30 IST nightly backup. The VPS root crontab already had ~25 UTC-scheduled jobs with inline comments like “04:00 IST (22:30 UTC)” — adding CRON_TZ= at the top would have silently shifted every pre-existing job by +5:30h.
Rule
Never add or change CRON_TZ= on a shared crontab without auditing every existing line. For a single new job, compute the UTC equivalent:
02:30 IST = 21:00 UTC prior day = 0 21 * * *18:00 IST = 12:30 UTC = 30 12 * * *
Add an inline comment noting the IST target so future readers understand why the time looks odd in UTC.
Applies to
- This VPS’s root crontab (convention is UTC)
- Any shared-crontab scenario where multiple services share the same cron user
- Multi-service Hostinger VPS deployments
Alternative
If a service genuinely needs its own TZ context: run it as a separate user’s crontab (sudo -u <user> crontab -e), which has its own CRON_TZ scope without affecting root crontab.