استفاده صحیح از task scheduling

2 سال پیش
توسط سجاد آپدیت شد
pedi ( 11026 تجربه )
3 سال پیش

دوستان مثلا من یک schedule تعریف میکنم به این صورت:

$schedule->call(function () {
            DB::table('recent_users')->delete();
        })->everyMinute();

خب حالا نکته اول اینه که تا من دستور

php artisan schedule:run

رو اجرا نکنم این هم اجرا نمیشه. تازه با اجرا کردنش هم فقط یه بار اجرا میشه. ینی یک دقیقه بعد، دوباره بصورت خودبخود اجرا نمیشه. حالا برای حل این مشکل، میشه از cron توی لینوکس و task scheduler داخل ویندوز استفاده کرد. من اومدم داخل ویندوزم یه فایل bat ایجاد کردم و اینو توش نوشتم:

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

و یه task جدید ایجاد کردم که هر دقیقه بره این فایلو بخونه تا دستور اجرا بشه.
حالا سوالم اینجاست که: با این روش، دیگه اون تابع زمانی (everyMinute) که توی لاراول میذاریم هیچ فایده ای نداره و همه چی وابسته میشه به اون زمانی که دستی توی task scheduler ویندوز تنظیم کردیم!
مثلا من میام اون تابع رو میذارم همون everyMinute. اما توی ویندوز تنظیم میکنم که اون فایل bat هر 5 دقیقه اجرا بشه! اینجوری خاصیت اون تابعه اونجا الکیه!
این قضیه واقعا درسته؟
اگه درست باشه، یه مشکل پیش میاد:
من اگه چندتا schedule مختلف داشته باشم و بخوام هر کدوم از اینارو با زمان های جدا اجرا کنم (مئلا هرروز، هر 5 دقیقه، هرهفته و...) مجبورم برای هر کدومشون یه task جدا داخل ویندوزم درست کنم! این خیلی اذیت میکنه.
ممنون میشم دوستان راهنمایی کنن

سجاد ( 13998 تجربه )
2 سال پیش
تخصص : برنامه نویس

سلام

شما در مسیر app\Console یک فایل دارید به اسم kernel کافی هست اونجا در تابع schedule کرون های خودتون رو اضافه کنید و بعد یک task بگذارید که هر دقیقه این فایل رو اجرا کنه.

برای ارسال پاسخ باید وارد سایت شوید