Learn about Artisan CLI in Laravel

Learn about Artisan CLI in Laravel

K. M. Shawkat Zamil | December 26, 2022

Hello developers,


All of the Laravel developers use Artisan commands in their Laravel projects. But many of them don't know all the Artisan commands and the hidden features. In this demonstration, we will cover the Artisan Commands in Laravel.


Artisan is the name of the command-line interface included with Laravel. It provides several helpful commands for your use while developing your application. (Source) Artisan exists at the root of your application as the artisan script and provides several helpful commands. To get all the commands you can simply type the below command in the terminal of your project:


php artisan list


Every command includes a help screen to provide help to the developers. The help command is given below:


php artisan help migrate


Writing Commands


Besides the artisan commands, you can write your custom commands. The custom commands are stored in the app/console/Commands directory. To make a new command you should use the make:command Artisan Command. Initially, the directory does not exist in your application. The first time you need to execute the following command to make the directory by the following command:


php artisan make:command SendEmails


 Specifying The Configuration Environment


You can specify the environment while running any command. If the environment should be local, you can write the command listed below: 


php artisan migrate --env=local


Displaying Your Current Laravel Version


To display your current Laravel version, you can type:


php artisan --version


Calling Commands Outsite of CLI


 Sometimes you need to execute a command outside of CLI, Suppose you want to run a command in Cpanel by your application in the HTTP route. Use the artisan facade and the below example:


Route::get('/example', function()
    $exitCode = Artisan::call('command:name', ['--option' => 'example']);


You may even use a queue to process the command in the background:


Route::get('/example', function()
    Artisan::queue('command:name', ['--option' => 'example']);


Scheduling Artisan Commands


 In the previous, developers have generated Cron entries for each console command they wish to schedule. To make things easier, Laravel introduces the Laravel Schedule. The command schedule is stored in app/Console/Kernel.php file. You can add as many scheduled jobs as you like. The only Cron entry you need to add to your server is this:


* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1


This Cron will call the laravel command scheduler every minute. More example is listed below:


Scheduling Clouser


To run the command hourly you can write the below command:


    // Do some task...


Scheduling Terminal Commands


To run commands in the terminal you can write the following code:


$schedule->exec('composer self-update')->daily();


Manual Cron Expression


 To write a manual Cron in your application, you can use the following code:


$schedule->command('example')->cron('* * * * *');


Frequent Jobs


To use frequent jobs in your applications you can use:




Daily Jobs


For executing the daily jobs in your appliaction, you can use:





Daily Jobs At Specific Time (24 hour time)


To run a daily job in a specific time, you need to add the time like below:





Twice Daily Jobs


For executing twice daily jobs in your appliaction, you can use twiceDaily() by following:




Jobs that run every weekday


To run a job in the weekday, you can use weekdays() like below:




Weekly Jobs


For executing jobs that run only weekly basis in your appliaction, you can use weekly() by following:


// Schedule weekly job for specific day (0-6) and time...
$schedule->command('example')->weeklyOn(1, '8:00');


Monthly Jobs


To run a job in monthly basis, you can use monthly() like below:




Jobs That Run On Specific Days


To run a job in the specific days, you can use dayName() like below:




Prevent Jobs From Overlapping


Generally, the scheduled jobs will be run if the previous job is still running. To prevent this, you can use withoutOverlapping() like below:




Limit The Environment The Jobs Should Run In


To make the specific environment for running any command you should use thye following way:




Indicate The Job Should Run Even When Application Is In  Maintenance Mode


To run any command even if the application is in the maintenance mode run the following command:




Allow Job To Run When Callback Is True


To run any command when the callback is true, simply follow the below command:


    return true;


E-Mail the output Of A Scheduled Job


To get e-mail after a job done, use below code. Note that the output file should be present in a directory.




Send The Output Of  The Scheduled Job To A Given Location


To send the output of the scheduled job to a given location, you can send the file from a specific location like below:




Ping A Given URL After The Job Runs


To ping a given URL after the job has executed its tasks, follow the below procedure:




That's all for today. Hope this long examples help you the journey of development.


Read More: What is eloquent serialization in Laravel


K. M. Shawkat Zamil

K. M. Shawkat Zamil

Senior Software Engineer

I am a Senior Software Engineer in a reputed company in Bangladesh. I am a big fan of Laravel, PHP Programming, MSSQL Server, MySql, JavaScript, and lots more. I love to help people who are especially eager to learn. I believe in patience and motivation.