Cron Every Minute Not Working — Fix Guide
💡If a cron job with * * * * * is not running, the most common causes are the cron daemon not running, the crontab file missing a trailing newline, a script permission error, or the script silently failing. Start by adding a simple echo test to confirm cron itself works, then debug the actual script.
Quick Diagnosis
If you see “cron entry saved but job never runs” → it means cron daemon may not be running, or the crontab has no trailing newline → do this: verify cron is running (systemctl status cron) and ensure the crontab ends with a newline
If you see “job runs but less frequently than every minute” → it means the script takes longer than 60 seconds, causing overlap prevention → do this: check script execution time and add a lock (flock) to prevent overlapping runs
If you see “* * * * * runs but output is empty” → it means the script runs but produces no output, or output is redirected to /dev/null → do this: add explicit logging inside the script: echo $(date) >> /tmp/cron-test.log
If you see “crontab -l shows the entry but nothing in logs” → it means cron daemon is not processing this user's crontab, or logging is disabled → do this: check /var/log/syslog for CRON entries: grep CRON /var/log/syslog | tail -20
Common Fixes
Missing newline at end of crontab
❌ Wrong
# Crontab file with no trailing newline
* * * * * /usr/local/bin/test.sh
# (no newline here — last line may be ignored)✅ Fixed
# Always end crontab with a blank line
* * * * * /usr/local/bin/test.sh
# ← blank line here ensures the job is parsedSome cron implementations ignore the last line of a crontab if it has no trailing newline. crontab -e adds it automatically — direct file edits may not.
Testing with a simple log command
❌ Wrong
# Hard to debug — no output
* * * * * /home/user/complex-script.sh✅ Fixed
# Add a minimal test job first
* * * * * echo $(date) >> /tmp/cron-test.log 2>&1
# If this works but complex-script.sh doesn't,
# the issue is inside the script (PATH, env, permissions)Start with the simplest possible command to confirm cron itself works, then add complexity.
Validate Your Cron Expression
Confirm your cron expression is syntactically correct and see when it will next trigger before adding it to crontab.
Step-by-Step Debug
- 1sudo systemctl status cron — confirm cron daemon is active
- 2crontab -l — confirm the entry exists as expected
- 3Add: * * * * * echo ok >> /tmp/cron.log 2>&1 — wait 2 minutes
- 4cat /tmp/cron.log — if entries appear, cron works fine
- 5Run the actual script manually as the cron user to reproduce the error
- 6grep CRON /var/log/syslog | tail -30 — look for error messages
Related Guides
Frequently Asked Questions
Is * * * * * valid cron syntax for every minute?
Yes. Five asterisks mean 'every minute of every hour of every day'. It is the most permissive cron schedule. If it is not running, the issue is the cron daemon, permissions, or the script itself.
Can cron miss runs if a job takes too long?
Cron does not automatically skip overlapping runs — it starts a new instance at the next minute regardless. If overlap is a problem, use flock or a PID file to prevent concurrent execution.
How do I confirm cron is actually running my job?
Add a simple test: * * * * * echo 'cron ok' >> /tmp/cron.log 2>&1. After 2 minutes, check /tmp/cron.log. If it has entries, cron works and the problem is in your original script.
All tools run in your browser. Your data never leaves your device.