Cron Job Not Running? Common Causes and Fixes
If your cron job is not running, you are not alone. This is one of the most common issues on Linux systems. Most causes fall into a handful of categories — and all are easy to debug once you know where to look.
Common Causes
Incorrect Cron Syntax
A small mistake in the schedule expression silently prevents execution. Even a missing space or wrong field count will stop a job from running.
Missing Permissions
The script may not have execution permissions, or the cron user may lack access to required files or directories.
Environment Differences
Cron runs with a minimal environment — no $PATH, no aliases, no .bashrc. Commands that work in a shell often fail silently in cron.
Output Not Captured
Cron discards stdout and stderr by default. Without explicit log redirection, errors are completely invisible.
Cron Daemon Not Running
On some systems the cron daemon itself may be stopped or disabled — causing all jobs to silently not execute.
Timezone Issues
Cron uses the system timezone. If your server runs in UTC, schedules may fire at unexpected local times.
How to debug
1. Check if the cron daemon is running
systemctl status cron # Debian/Ubuntu
systemctl status crond # RHEL/CentOS/Fedora
2. View recent cron log entries
grep CRON /var/log/syslog | tail -30
# or on systems using journald:
journalctl -u cron --since "1 hour ago"
3. Verify your crontab
crontab -l # current user
sudo crontab -l -u root # root crontab
ls /etc/cron.d/ # system-wide entries
4. Check script permissions
ls -la /path/to/your/script.sh
chmod +x /path/to/your/script.sh
5. Test with cron's limited environment
env -i HOME=/root SHELL=/bin/bash \
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
/bin/bash -c 'your-command-here'
6. Capture output in your crontab entry
# Append stdout and stderr to a log file:
* * * * * /path/to/script.sh >> /var/log/myjob.log 2>&1
Prevent future issues with monitoring
Manual debugging is time-consuming. A cron monitoring tool gives you execution history, output logs and failure alerts automatically — so you know instantly when something goes wrong, without SSH access.
Execution History
Every run recorded with exit code, duration and full output. No more grepping logs manually.
Instant Alerts
Email notification the moment a job fails. Know about issues before they cause problems.
Multi-Server Overview
All your cron jobs across every server in one dashboard. No SSH required to check status.
Start Monitoring Your Cron Jobs
CronManager is free, open source and self-hosted. Deploy in minutes with Docker.
Install with Docker →