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

4 سال پیش توسط عمو پدی مطرح شد
آفلاین
user-avatar
عمو پدی ( 11376 تجربه )
4 سال پیش
تخصص : برنامه نویس خرده پای ری اکت

لینک کوتاه اشتراک گذاری

0

دوستان مثلا من یک 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 جدا داخل ویندوزم درست کنم! این خیلی اذیت میکنه.
ممنون میشم دوستان راهنمایی کنن

آفلاین
user-avatar
سجاد ( 15733 تجربه )
4 سال پیش
تخصص : برنامه نویس

لینک کوتاه اشتراک گذاری

0

سلام

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

برای ارسال پاسخ لازم است، ابتدا وارد سایت شوید.