آموزش ایجاد  Task Scheduling با استفاده از Cron Job در لاراول

آموزش ایجاد Task Scheduling با استفاده از Cron Job در لاراول

در لاراول شما می توانید با استفاده از  Task Scheduling  برنامه ها و کارهایی همچون ارسال ایمیل را بصورت زماندار انجام دهید.در این آموزش قصد داریم به شما نشان دهیم تا با استفاده از برنامه cronjob برنامه ریزی یا ( Task Scheduling ) را در نرم افزار خود (لاراول) تنظیم کنید.

 

در این آموزش قصد داریم به شما نشان دهیم تا با استفاده از برنامه cronjob برنامه ریزی یا ( Task Scheduling ) را در نرم افزار خود (لاراول) تنظیم کنید.

 

اما ابتدا باید بدانیم Cron (بخوانید کِرن) چیست؟

Cron یک سرویس زمانبندی است که وظیفه اجرای روتین‌های خاصی را در زمان مشخص بر عهده دارد. Cron این امکان را ایجاد می کند که کارهای روتین و روزمره را به صورت اتوماتیک به انجام برسانیم. کارهایی که باید با زمانبندی انجام شوند در فایلی با نام CronTab ذخیره می شوند. CronTab یک فایل متنی است که در هر سطر آن یک دستور با فرمتی که برای Cron قابل فهم است قرار می گیرد. به هر کدام از دستورات این فایل اصطلاحا Cron Job گفته می شود.

 

در لاراول شما می توانید با استفاده از  Task Scheduling  برنامه ها و کارهایی همچون ارسال ایمیل را بصورت زماندار انجام دهید.

برای نمونه شما کاربرانی دارید که میخواهید در زمان های خاصی برای آنها ایمیل یا پیامک یا پیغام اطلاع رسانی ارسال شود. بنابراین شما می توانید با استفاده از  Task Scheduling  در لاراول این کار را انجام دهید.

اگر شما از هاست های اشتراکی استفاده می کنید به ناچار و بخاطر در دسترس نبودن خط فرمان. شما باید از بخش cronjob در هاست خود استفاده نمایید. 

 

۱− ابتدا با استفاده از دستور زیر لاراول را نصب کنید:

composer create-project --prefer-dist laravel/laravel blog

 

۲− ایجاد command:

ما به یک command شخصی نیاز داریم. فرمان های شخصی (سفارشی) کار اجرا کردن cronjob مورد نظر را انجام می دهند.

برای ایجاد یک کامند سفارشی دستور زیر را در خط فرمان وارد کنید:

php artisan make:command DemoCron --command=demo:cron

 

۳− حال به آدرس app/Console/Commands/DemoCron.php رفته و تغییرات زیر را در آن اعمال کنید:

<?php
   
namespace App\Console\Commands;
   
use Illuminate\Console\Command;
   
class DemoCron extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'demo:cron';
    
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';
    
    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }
    
    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        \Log::info("Cron is working fine!");
     
        /*
           Write your database logic we bellow:
           Item::create(['name'=>'hello new']);
        */
      
        $this->info('Demo:Cron Cummand Run successfully!');
    }
}

 

۴− Register کردن  Task Scheduler

در این مرحله ما باید دستورات خود را همراه با زمانی که می خواهیم عملیات ما در آن بازه ها اجرا شود در فایل Kernel.php وارد نماییم٫

بازه های زمانی که شما می توانید از آنها استفاده نمایید بصورت زیر می باشند:

->everyMinute(); Run the task every minute
->everyFiveMinutes(); Run the task every five minutes
->everyTenMinutes(); Run the task every ten minutes
->everyFifteenMinutes(); Run the task every fifteen minutes
->everyThirtyMinutes(); Run the task every thirty minutes
->hourly(); Run the task every hour
->hourlyAt(17); Run the task every hour at 17 mins past the hour
->daily(); Run the task every day at midnight
->dailyAt(’13:00′); Run the task every day at 13:00
->twiceDaily(1, 13); Run the task daily at 1:00 & 13:00
->weekly(); Run the task every week
->weeklyOn(1, ‘8:00’); Run the task every week on Tuesday at 8:00
->monthly(); Run the task every month
->monthlyOn(4, ’15:00′); Run the task every month on the 4th at 15:00
->quarterly(); Run the task every quarter
->yearly(); Run the task every year
->timezone(‘America/New_York’); Set the timezone

 

فایل app/Console/Kernel.php را باز کنید و مطابق زیر تغییر دهید:

<?php
   
namespace App\Console;
    
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
    
class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        Commands\DemoCron::class,
    ];
     
    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('demo:cron')
                 ->everyMinute();
    }
     
    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');
     
        require base_path('routes/console.php');
    }
}

 

در پروپرتی $commands  همانگونه که مشاهده می کنید آدرس کامند مورد نظر را وارد کرده ایم و سپس در تابع schedule تعریف کرده ایم که هر یک دقیقه یک بار کامند ما اجرا شود که با اجرای آن در مثال با یک لاگ به فایل laravel.log افزوده خواهد شد. و به همین صورت شما می توانید ارسال ایمیل. پیامک یا هر کار دیگری را انجام دهید.

۵− اجرای Scheduler بصورت تست:

برای اجرای Scheduler بصورت تست اگر به خط فرمان دسترسی دارید دستور زیر را اجرا کنید:

php artisan schedule:run

 

پس از اجرا دستوراتی مشابه زیر در فایل storage/logs/laravel.log مشاهده خواهید کرد

[2019-04-24 03:46:42] local.INFO: Cron is working fine!  
[2019-04-24 03:46:52] local.INFO: Cron is working fine!  
[2019-04-24 03:46:55] local.INFO: Cron is working fine!  

 

حال برای اجرای خودکار scheduler باید یکی از دو کد زیر را به فایل crontab در سرور ابونتو یا به بخش cronjob در هاست های اشتراکی اضاف نمایید:

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

   

OR

  

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

 

 

امیدوارم از این آموزش لذت برده باشید. درصورتی که سوال یا پیشنهادی دارید از بخش نظرات ارسال نمایید.


دسته بندی ها:

لاراول

ارسال نظر

برای اطلاع از پاسخ به نظر شما می توانید ایمیل یا شماره موبایل خود را وارد نمایید. *

ایمیل و شماره موبایل شما کاملا مخفی خواهد ماند و در سایت نمایش داده نخواهد شد. *

اگر نظری برای این مطلب ارسال شد از طریق ایمیل مرا اطلاع بده!
لسیت نظرات
ایمان
سلام وقت بخیر. در .مورد زمان بندی روی سرور چیکار کنیم ؟ همه رو بزاریم روی * ؟

پاسخ به این نظر

پاسخ
iman
سلام وقت بخیر نه از supervisor یا لاراول هورایزن استفاده کنید

پاسخ به این نظر