Laravel's task scheduler makes it easy to automate repetitive tasks like sending emails or cleaning up logs. On shared hosting with cPanel, you can trigger Laravel's scheduler using cron jobs. In this post, I’ll guide you through setting it up step by step.
๐ ️ Prerequisites
- Laravel project already deployed on cPanel
- Access to cPanel's Cron Jobs section
- Basic knowledge of Laravel commands
๐ Step 1: Create Your Laravel Scheduled Tasks
Define your scheduled tasks inside the app/Console/Kernel.php
file under the schedule()
method:
protected function schedule(Schedule $schedule)
{
$schedule->command('emails:send')->daily();
$schedule->command('backup:run')->weekly();
}
You can schedule Artisan commands, closures, queue jobs, and more.
๐ Step 2: Locate the Laravel Project Path
Find the absolute path to your Laravel project on the server. This is usually something like:
/home/your-cpanel-username/your-laravel-folder
You’ll need this path when configuring the cron job.
⏱️ Step 3: Set Up the Cron Job in cPanel
- Log in to your cPanel dashboard.
- Go to the Cron Jobs section.
- Under Add New Cron Job:
- Choose a common schedule, e.g., Once Per Minute (* * * * *).
- In the command field, enter:
cd /home/your-cpanel-username/your-laravel-folder && php artisan schedule:run >> /dev/null 2>&1
This command tells the server to run Laravel's scheduler every minute.
⚙️ Step 4: Make Sure PHP CLI is Available
Some shared hosting servers may not recognize the php
command. In that case, replace it with the full path to PHP, which you can find by running:
which php
Or ask your hosting provider. Then update the cron command like:
/usr/local/bin/php artisan schedule:run >> /dev/null 2>&1
๐ Step 5: Verify That Your Jobs Are Running
- Add log output in your scheduled command to test it’s being triggered.
- Check the
laravel.log
file insidestorage/logs
. - You can also create a test command that writes to a custom log file.
๐งช Optional: Disable Scheduler in Non-Production
To avoid running scheduled jobs in development or staging environments, you can check the environment in your schedule method:
if ($this->app->environment('production')) {
$schedule->command('your:task')->daily();
}
๐ Done!
You’ve now successfully configured Laravel cron jobs on a cPanel-hosted environment. With this setup, Laravel will handle task scheduling in the background — no manual effort needed!
If this guide helped, feel free to share it with fellow developers or connect with me on LinkedIn!
Comments
Post a Comment