Cron for the Laravel Scheduler
Laravel's scheduler needs exactly one cron entry: run php artisan schedule:run every minute. Laravel then decides internally which of your scheduled tasks are due. Add this line to the crontab of the user that owns your app.
The crontab line
Run crontab -e as your web/app user and add:
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
This runs every minute. Laravel's kernel reads your schedule() definitions and only executes the tasks that are actually due, so one cron entry drives your whole schedule.
Use absolute paths
Cron has a minimal PATH. Use the full path to PHP if php isn't found: /usr/bin/php artisan schedule:run. Run which php to confirm the location.
Verify it runs
Temporarily log output: * * * * * cd /path-to-project && /usr/bin/php artisan schedule:run >> storage/logs/schedule.log 2>&1. Wait a minute and check the file. You can also run php artisan schedule:list to see registered tasks.
FAQ
What cron entry does Laravel need?
Just one: * * * * * cd /path && php artisan schedule:run runs every minute. Laravel decides which scheduled tasks are due each run.
Why isn't my Laravel scheduler running?
Usually a wrong path or PHP not on cron's PATH. Use absolute paths (/usr/bin/php) and add the cron entry under the user that owns the project files.
Can I run schedule:run less than every minute?
No — Laravel expects a per-minute cron tick and handles finer timing itself. Running it less often means minute-level tasks are missed.