تو این چیزی ننوشتید که بخواد اجرا بشه
مواقعی هست که می خواهید یک دستور در زمان های مشخصی به طور اتوماتیک اجرا شود با استفاده از command scheduler این کار رو به راحتی میتونید انجام دهید. برای اینکار کافیه توی مسیر app/Console فایل Kernel.php را باز کنید و داخل متد schedule دستور مورد نظرتون رو بنویسید. مثلا در مثالی که اشاره کنید میتونید به طور مستقیم یک عملیاتی را داخل closure تعریف کنید و متد بعدی آن هم برنامه زمانی اجرای آن را مشخص میکند که در مثالی که ذکر کردین هر ۵ ذقیقه یک بار است. به چندتا مثال زیر توجه کنید:
protected function schedule(Schedule $schedule)
{
$schedule->command('inspire')->hourly();
$schedule->command('cache:clear')->hourly();
$schedule->call(function()
{
\DB::delete("DELETE * FROM accounts WHERE expire = ?", [0]);
})->dailyAt('24:00');
}
از آخر توضیح میدم ببینید به متد call یک closure یا تابع بی نام داده ایم که به طور مستقیم یک دستور SQL رو نوشتم که هر روز سر ساعت 24:00 میاد و حساب های کاربری که انقضا آنها صفر شده است را حذف میکند
در مثال وسطی به متد cammand میشه یک فرمان CLI یا همون Artisan Command Line که وجود داره رو به طور مستقیم بهش داد که در اینجا دستور clear:cache رو بهش دادیم و گفتیم که هر یک ساعت یکبار cache رو پاک کند
همچنین می توانیم یک فرمان جدید Artisan ایجاد کنیم مثال اولی هم یک فرمان جدید Artisan رو به نام inspire ایجاد کرده و ابتدا آن را به پراپرتی commands$ که یک آرایه هست اضافه کرده و سپس در متد schedule از آن استفاده کرده. کلاس این فرمان در مسیر app/Console/Commands قرار دارد.
protected $commands = [
'App\Console\Commands\Inspire',
];
فرمان inspire که به صورت php artisan inspire در ترمینال قابل اجرا هست هم هر یک ساعت یکبار اجرا خواهد شد. در صورتی که میخواهید با نحوه ایجاد یک فرمان Artisan آشنا شوید این
لینک خیلی واضح توضیح داده است
در انتها اگر دستور زیر را به cron job هاست خود بدهید هر یک دقیقه یک بار این دستور را اجرا میکند و اگر job ای وجود داشت اجرا میکند
* * * * * php /var/www/html/laravel/artisan schedule:run 1>> /dev/null 2>&1
دقت کنید بعد از دستور php باید مسیر فیزیکی فابل artisan که در پوشه اصلی فریمورک قرار داره رو بنویسید
همچنین اینجا فقط دوتا متد hourly و dailyAt رو مثال زدم ولی کلی متد دیگه هم هست که در زیر براتون لیست میکنم و میتونید از هرکدوم استفاده کنید :
->hourly()
->daily()
->at($time) // 24 hour time
->dailyAt($time)
->twiceDaily()
->weekdays()
->mondays()
->tuesdays()
->wednesdays()
->thursdays()
->fridays()
->saturdays()
->sundays()
->weekly()
->weeklyOn($day, $time)
->monthly()
->yearly()
->everyFiveMinutes()
->everyTenMinutes()
->everyThirtyMinutes()
->days() // Days of the week