Troubleshooting Guide

Cron Command Not Found: How to Fix PATH Issues

Your command works in terminal but cron says "command not found." Here's why and how to fix it.

Why This Happens

When you open a terminal, your shell loads configuration files (.bashrc, .profile) that set up your PATH with directories like /usr/local/bin, /home/user/.local/bin, etc.

Cron doesn't load these files. It uses a minimal PATH:

/usr/bin:/bin

So when you run node script.js in terminal, bash finds node at /usr/local/bin/node. But cron can't find it because /usr/local/bin isn't in its PATH.

Solution 1: Use Absolute Paths (Recommended)

The simplest fix: use the full path to every command.

# Find the full path to your command
which node
# /usr/local/bin/node

which python3
# /usr/bin/python3

# Use the full path in crontab
0 * * * * /usr/local/bin/node /home/user/app/script.js
0 * * * * /usr/bin/python3 /home/user/scripts/backup.py

This is the most reliable approach and works across different systems.

Solution 2: Set PATH in Crontab

Add a PATH declaration at the top of your crontab:

# Edit your crontab
crontab -e

# Add PATH at the top
PATH=/usr/local/bin:/usr/bin:/bin:/home/user/.local/bin

# Now your jobs can use short command names
0 * * * * node /home/user/app/script.js

This sets PATH for all jobs in your crontab.

Solution 3: Set PATH in Your Script

Export PATH at the start of your script:

#!/bin/bash
export PATH=/usr/local/bin:/usr/bin:/bin:$PATH

# Now commands work normally
node /home/user/app/script.js
npm run build

Solution 4: Source Your Profile

Load your shell configuration in the script:

#!/bin/bash
source ~/.bashrc  # or ~/.profile

# Your commands here
nvm use 18
node script.js

Use this if you need environment managers like nvm, pyenv, or rbenv.

Common Commands and Their Paths

# Find paths on your system with 'which'
which node      # /usr/local/bin/node or /usr/bin/node
which npm       # /usr/local/bin/npm
which python3   # /usr/bin/python3
which pip3      # /usr/bin/pip3
which ruby      # /usr/bin/ruby
which php       # /usr/bin/php
which docker    # /usr/bin/docker
which aws       # /usr/local/bin/aws

Debugging Tips

Log the environment:

# Add this to see what cron's environment looks like
* * * * * env > /tmp/cron-env.txt

Test with cron's environment:

# Simulate cron's minimal environment
env -i PATH=/usr/bin:/bin /bin/sh -c 'your-command-here'

If this fails but running normally works, you've confirmed it's a PATH issue.

Never debug silent cron failures again

CronSignal alerts you the moment a job doesn't run. Know about failures before they become disasters.

Start Monitoring Free

3 checks free. No credit card required.