سامان
5 سال پیش توسط سامان مطرح شد
5 پاسخ

cronjob

سلام . من یک مشکل داشتم در لاراول . مشکلم اینه که میخواستم یک کاری را با استفاده از cronjob در لاراول انجام بدم . میخوام مثلا به یک جدول دیتابیس هر دقیقه یکبار یک رکورد اضافه کنم . همه کارهائی که لازم بود را انجام داده ام ولی آخرش کاراصلی انجام نمیشه یعنی کران جاب کارم میکنه و برام یک email هم میزنه ولی در ایمیل ذکر میکنه که Class 'Illuminate\Console\Command' not found . یعنی این کلاس را در فایل cron.php که توسط آرتیسان درستش کردم (artisan:console cron.php) نمیتونه پیدا کنه . نمیدونم چرا این پیام رو میزنه چون در مسیر vendoe\laravel\framework\src\illuminate\Console , فایل Command.php را دارم . در فایل cron.php فضای نام namespace App\Console\Commands; را در ابتدای فایل دارم ولی بازم کار نمیکنه . میشه لطف کنید در این مورد راهنمائی کنید ؟ ممنون از شما


ثبت پرسش جدید
محمد صادقیان
تخصص : برنامه نویس وب - فریم ورک Lara...
@drcode.ir 5 سال پیش مطرح شد
0

@samanf33
درود.یه کاری می تونید بکنید. توی یکی از Controller هاتون یک تابع بسازید مثلا cronjob و همین تابع رو هربار اجرا کنید.
برای تعریف تابع جهت اجرا در cronjob هم باید در فایل App/console/kernel.php در بخش schedule اون تابع رو تعریف کنید. مثل کد زیر :

{
  $schedule->call('\App\Http\Controllers\BotController@get_mobiles')->cron('*/3 * * * *')->runInBackground();
}

حالا با اجرای دستور php artisan schedule:run همون تابع اجرا خواهد شد.


سامان
@samanf33 5 سال پیش مطرح شد
0

سلام . تشکر از پاسختون . من در شبکه که سرچ کرده ام تعدادی زیادی سایتهای ایرانی و خارجی طریقه کار با cronjob را مرحله به مرحله با مثال توضیح داده اند . برخی از این مثالها عینا مثل کاریه که من میخوام انجام بدم یعنی بصورت پریودیک یک دیتائی به یک بانک اطلاعاتی اضافه بشه. و هیچ فرقی نداشتن و همه شون دارن کار میکنن . همه اونا گفتن اول در محیط local با دستورات artisan فایل کرون را بسازیم که در نتیجه اش فایل کرنل هم در فولدر commands ساخته میشه , و بعد یه سری دیگخ کارها رو گفتن که انجام بدیم که موبمو همه ر انجام میدم , ولی در برنامه من هنگامی که به سراغ فایل کرون (که در آن تابع) handle() تعریف شده میره نمیتونه کلاسهای دیگر را شناسائی کنه (علیرغم اینکه در متن کد آنها را use کرده ام و همچنین مسیر را که دنبال میکنم آنها را میبینم یعنی قطعا هستند . خطائی که میده اینه که میگه نمیتونه اون کلاسها رو پیدا کنه .
من در محیط cpanel ارتباط با سرور دارم . دو تا سوال اساسی دارم اول اینکه با توضیحات بالا چرا باید همچین خطائی را بده ؟ آیا باید جائی در فایلهای config چیزی رو ست کنیم یا کار دیگه ای شبیه به این ؟ سوال دومم (ضمن تشکر از رااهنمائی شما) اینه که با راه حلی که شما ارائه دادید , آیا نیازی دیگه به پرکردن فیلد command در قسمت cronjob مربوط به cpanel ندارم؟ و به فرمتی که شما گفتید , تابع کران جاب که در برنامه من اسمش FirstCommand.php هستش را نباید کاری داشته باشیم؟ اصلا دنبال بخش cronJob در cpanel نباید بریم ؟ من طبق راهنمائی این کارا رو انجام دادم : اول در یکی از فایلهای controller بنام HomeController3 تابعی بنام addRecord() درست کردم که کار اضافه کردن رکورد به دیتابیس رو انجام میده و در فایل کرنل هم عبارت
$schedule->call('\App\Http\Controllers\HomeController3@addRecord')->cron(' *')->runInBackground(); را در تابع schedule اضافه کردم . و البته کاری هم با فایل کرون که FirstCommand.php نام داشت نکردم . جوابی نگرفتم . آیا کار دیگه ای هم باید میکردم؟ بسیار تشکر از راهنمائی شما


محمد صادقیان
تخصص : برنامه نویس وب - فریم ورک Lara...
@drcode.ir 5 سال پیش مطرح شد
0

نه دیگه شما فقط دارید داخل پروژه لاراولتون یک schedule تعریف می کنید ولی این باید هر بار توسط همون بخش cronjob در cpanel اجرا بشه. یعنی اجرا کننده این schedule همون cronjob در cpanel هست دیگه.
برای تعریف cronjob از طریق cpanel هم می تونید از ساختار زیر استفاده کنید البته این یک ساختار کلی هست که باید نسبت به cpanel خودتون تغییرات جزئی در ساختارش بدید و اسم پروژه خودتون رو جایگزین کنید.

/usr/local/bin/php /home3/drcodeir/dr-code.ir/instagram/artisan schedule:run 2>&1 > /home3/drcodeir/dr-code.ir/instagram/storage/cron.log

و اما توضیحات کوتاه :

usr/local/bin/php

کد بالا داره به روت php اشاره می کنه که در کدوم مسیر قرار داره.

home3/drcodeir/dr-code.ir/instagram/artisan schedule:run

کد بالا داره به ادرس اصلی پروژه اشاره می کنه یعنی پروژه لاراولی شما و داخل همون پوشه پروژه داره دستور artisan schedule:run اجرا می کنه. پس هر schedule تعریف بشه تو پروژه شما داره هر بار اجرا میشه.

/home3/drcodeir/dr-code.ir/instagram/storage/cron.log

کد بالا هم داره یک فایل به نام cron.log در مسیر storage پروژه شما ایجاد می کنه و گزارش اجرا یا خطا های اجراهارو اونجا ذخیره می کنه.


سامان
@samanf33 5 سال پیش مطرح شد
0

سلام . بسیار بسیار سپاسگزار از شما . مشکل حل شد . فقط یه سوال کوچیک , در خط دوم که آدرس اصلی پروژه هست در مثال شما عبارت dr-code.ir هستش , این یه آدرس url هستش ؟ یعنی میشه بجای آدرس عادی url پروژه رو داد به کرون ؟ البته من همان آدرس اصلی که در سرور هستش را دادم . بازم تشکر


محمد صادقیان
تخصص : برنامه نویس وب - فریم ورک Lara...
@drcode.ir 5 سال پیش مطرح شد
1

بله dr-code.ir نام دامنه من هست. یعنی اگر توی cpanel برید توی filemanager میبنید دقیق آدرس جایی که هستید رو داره نمایش میده. همون رو کپی کنی و استفاده کنید ازش.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام