گیک فارسی

نوشته های یک گیک فارسی از فعالیت ها ،‌ علاقه مندی ها و نقد هایش

ایجاد Cron Job (کرون جاب) به صورت دینامیک با PHP

13 دیدگاه‌ها

به طور کلی هر وقت بخواهیم یکسری عملیات را به صورت تکراری در بازه های زمانی مشخص انجام بدیم از Cron Job استفاده میکنیم. Cron یک سرویس برای زمانبندی انجام کار ها در لینوکس هست که با دستور crontab میشه اون را مدیریت کرد. معمولاً ما از طریق cPanel میتونیم Cron Job های مورد نظرمون را تعریف و به کار بگیریم. اما اگه بخواهیم Cron Job ها را به صورت دینامیک ایجاد کنیم چی ؟

برای ایجاد Cron Job به صورت دینامیک سه تا سناریو داریم :
– از یک هاست اختصاصی حالا VPS یا Dedicated استفاده میکنیم و به دستور crontab از طریق PHP دسترسی داریم. در این حالت با تابع exec و دستور crontab به راحتی میتونیم cronjob ها را مدیریت کنیم.

– از یک هاست Shared استفاده میکنیم که از cPanel نسخه ۱۱.۳۲ به بالا استفاده میکنه ، در این حالت cPanel API2 – Cron را در اختیار داریم و براحتی با cPanel از طریق PHP میتونیم cronjob ها را مدیریت کنیم. اینجا توی پاسخ تأیید شده میتونید مثال‌های کاربردی را ببنید.

– از یک هاست Shared استفاد میکنیم که cPanel قدیمی داره و از cPanel API2 پشتیبانی نمیکنه ولی از SSH پشتیبانی میکنه و دسترسی های مورد نیاز هم از این طریق به ما میده. میتونید یکبار از طریق یک نرم‌افزار مثل putty کامل چک کنید و مطمئن بشین میتونید Cron Job ها را مدیریت کنید. حالا از طریق PHP libssh2 میتونید Cron Job ها را مدیریت کنید. اینجا یک آموزش کامل لاتین در این مورد هست.

– از یک هاست Shared استفاد میکنیم که cPanel قدیمی داره و از cPanel API2 و SSH (من جای شما بودم هاستم را عوض میکردم) پشتیبانی نمیکنه. در این حالت باید از سرویس های Cronjob دیگه که امکان مدیریت از طریق وب سرویس را فراهم میکنند استفاده کنیم. یکی از این سایت‌ها setcronjob.com هست که خودم زیاد ازش استفاده کرده‌ام و توصیه و تاییدش میکنم (نه اینکه هاست های من از دو روش بالا پشتیبانی نمیکنند بلکه کلاً روی سرویس های shared ترجیح میدم از سرویس های آنلاین استفاده کنم که گزارش گیری داره و از یک جا میتونم Cron Job های همه سایت‌ها را مدیریت کنم).



برچسب‌ها:

  1. Painter گفت:

    مروری خدمات cronjob آنلاین را می توان در http://www.cronjobservices.com/ یافت

  2. حسین گفت:

    سلام من میخواستم بک برنامه Reminder با php بنویسم، با سرچ کردن متوجه شدم به cronjob احتیاج دارم که البته با php بتونم اجراش کنم، میشه لطف کنید بیشتر راهنمایی کنید، از چه هاستی استفاده کنم، crontab رو چجوزی استفاده کنم و …
    اگر آموزش خاصی هست لینکش رو بدید ممنون میشم.
    متشکر.

    1. یونیک مدیر گفت:

      cronatb یک دستور در Bash یا همون ترمینال لینوکس هست که باهاش میتونین کرون جاب ها را ایجاد کنید. برای استفاده از اون باید یک میزبانی VPS بخرین و با PHP از طریق exec و این دستور Cronjob ها را برای Reminder خودتون ست کنین. (این روش درست و اصلی هست اما خوب هاست VPS کمی گرونتر براتون در میاد)

      اگه قصد دارین از هاست Shared استفاده کنین هم از شرکت میزبانی بپرسین cpanel اون ها از API2 استفاده میکنه یا نه و آیا امکان ست کردن Cronjob از طریق این API توی هاستشون امکان پذیر هست یا نه ! در مورد کد ها هم توی همین پست لینک گذاشتم. اگه کمک دیگه ای باشه در خدمتم.

  3. میلاد گفت:

    میتونین راهنمایی کنید چطور یه اسکریپت رو محدود کنم که از منابع کمتری استفاده کنه

    1. یونیک مدیر گفت:

      میشه از nice و cpulimit و cgroups استفاده کرد که اینجا توضیحاتی داده:
      http://blog.scoutapp.com/articles/2014/11/04/restricting-process-cpu-usage-using-nice-cpulimit-and-cgroups

      البته فکر کنم بهترینش cgroups باشه:
      http://www.fernandoalmeida.net/blog/how-to-limit-cpu-and-memory-usage-with-cgroups-on-debian-ubuntu/

  4. رادمان گفت:

    با عرض سلام و وقت بخیر.
    دوست عزیز بنده نیاز دارم جایگزینی برای کرون جاب پیدا کنم،مورد بنده رباتیست تلگرامی و خب پس باید مثلا برای 30 ربات 30 کرون جاب ساخته بشه و این هاست یا سرور رو کامل درگیر میکنه ایا بنظر شما جایگزینی وجود دارد؟یا راه حلی

    1. یونیک مدیر گفت:

      بیشتر باید توضیح بدین ، لطفا کامل بگین مشکل چیه تا اگه بتونم اهمایی کنم.

  5. امیر گفت:

    سلام
    من میخوام تو سایت وقتی کاربر ثبت نام میکنه! بعد از مثلا 10 دقیقه براش ایمیل بره ممنون میشم راهنمایی کنید

    1. یونیک مدیر گفت:

      میتونید یک Cronjob داشته باشین که هر ۱ دقیقه کاربرایی که ثبت نام نکردن و براشون ایمیل نرفته بررسی کنه و اگه فاصله زمان ثبت نام و زمان حال اجرای اون Cronjob ده دقیقه و بیشتر بود ایمیل بفرسته و کاربر را به عنوان کسی که ایمیل براش رفته mark کنه.

  6. کوروش گفت:

    سلام روز بخیر
    من یک مشکل دارم و چون تخصصی هم در این زمینه ها ندارم نمیدونم باید چکار کنم
    من از هاست اشتراکی پارس پک استفاده میکنم .اینا اومدن بخاطر مسایل امنیتی یه جورایی استفاده از کرون جاب رو محدود کردن.گزینه کرون جاب داخل دایرکت ادمین هستا اما وقتی دستورات رو ادد میکنم اجرا نمیشن
    پشتیبانیش میگه باید از دستورات جایگزین wget در php استفاده نمایید

    من نمیدونم باید چکار کنم امکانش هست شما کمکم کنید؟
    ممنون

    1. یونیک مدیر گفت:

      راستش من هم متوجه منظورش نشدم! دستورات جایگزین wget!؟ wget یک نرم افزار روی لینوکس برای دریافت فایل و کلا درخواست های http و غیره هست. توی php میشه از curl و file_get_contents (در صورتی که محدود نشده باشه) استفاده کرد. اما شما باید توی cronjob از خود دستوران لینوکسی استفاده کنید. معمولا همون wget و curl باید کار کنه! چرا از setcronjob.com یا سایت‌های شبیه رایگاه استفاده نمیکنید (cron-job.org) !؟

  7. Amin گفت:

    سلام وقت بخیر
    من یه ربات تلگرام میخوام درست کنم که یه reminder داره کاربر میاد میگه اگر مثلا نرخ دلار رسید به 25000 تومن به من اعلام کن ، اگر نرخ لیر ترکیه رسید به فلان عدد به من بگو ، اگر نرخ ریال عربستان رسید به فلان به من بگو ، اگر نرخ دینار کویت رسید به فلان به من بگو و …
    حالا ما میام از طریق api نرخ این ارزا رو دریافت می کنیم ، فقط الان که اول کاره کاربر نیست ولی میخوام بدونم که چطوری از همین الان بهینه بنویسم که اگر کاربر زیاد شد و تعداد reminder ها زیاد شد هر یه دقیقه بیاد اتومات کرون جاب چک کنه و تمام reminder های ثبت شده کاربرا رو بررسی کنه اگر به مقدار دلخواه برسن از طریق بات تلگرام اطلاع بده؟

    1. یونیک مدیر گفت:

      این قبیل پرسشها نیاز به دانستن خیلی موارد سمت بک اند داره و بر اساس استکی استفاده میکنید ممکنه روشهای مختلفی وجود داشته باشه ،‌پیشنهاد میکنم توی یک سایت تخصصی تر در زمینه پاسخ به سوالات برنامه نویسی مانند barnamenevis.org مطرح کنید و به پاسخ برسین.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *