بدون استفاده از كران جاب ...

hmarei

New Member
سلام
ببينم راهي وجود داره كه ي اسكريپت بدون استفاده از كران جاب "cronjob" هر 10 دقيقه يا 15 دقيقه اجرا بشه ؟
آخه اين ي سايت مثه پارسيكه كه بايد آخرين اخبار رو بياره رو سايت هر 10 دقيقه ولي مشكل اينجاست كه ديتاسنتر هشدار داده به سرور ما كه كران جاب ها بايد رو يك ساعت تنظيم شه !
حالا سايتي هست كه اينكارو بكنه ؟ يا ميشه اسكريپتي با php نوشت كه اگربار اول اجرا شد. هر 10 دقيقه اتوماتيك خوشو اجرا كنه ؟
كمك كنيد سريعا " !
 
با php که میشه اینو نوشت (با هر زبان دیگری هم میشه ) اما مشکلش اینه که بر خلاف cron job بستگی اجرای این فرایند به اون اینه که کران داخل سرور انجام میگیره اما در این حالت پنجره ی کد نویسی شما باید برای همیشه باز باشه و کد همیشه در حال اجرا و خوب طبیعتا اتصال به اینترنت دائمی !

( البته فکر کنم راه دیگری نباشه ، چون خود من هم یک مدت دنبالش بودم برای خالی کردن دیتابیسم )
 

hba

Active Member
يك راه ديگه
چك كردن زمان با باز كردن صفحه توسط كاربران

يعني هر كاربري صفحه رو باز كردن زمان چك شه بعد 10 دقيقه بود عمليات با باز كردن اون شخص انجام شه
 

amir01

Well-Known Member
اگه درست متوجه شده باشم شما میخوای یه قسمت از سایتت هر 10 دقیقه یه بار رفرش بشه درسته؟
اگه این باشه با آژاکس راحت میشه این کارو کرد...(البته اگه درست متوجه شده باشم مشکلت رو)
 

peyman1987

Member
يك راه ديگه
چك كردن زمان با باز كردن صفحه توسط كاربران

يعني هر كاربري صفحه رو باز كردن زمان چك شه بعد 10 دقيقه بود عمليات با باز كردن اون شخص انجام شه

اين بهترين و تنها راه انجام اين کار بدون Cron هست. البته وابستگي شديد به اين داره که شما حداقل دقيقه اي يک بازديدکننده از سايتتون ديدن کنه و صفحه رو باز کنه.
 

hba

Active Member
نه اگر مي خواهد 10 دقيقه يك بار كاري صورت بگيره يعني كافيه هر 10 دقيقه يك نفر صفحه اول سايت رو باز كنه
 

peyman1987

Member
نه اگر مي خواهد 10 دقيقه يك بار كاري صورت بگيره يعني كافيه هر 10 دقيقه يك نفر صفحه اول سايت رو باز كنه

درسته ولي به شرطي که تاريخ قبلي ريفرش رو يه جا ذخيره کنيم.

اگر بخواين از روشهايي مثل تقسيم زمان بر مدت زمان و از اين چيزها استفاده کنين نياز دارين که کدتون هر يک دقيقه ( حداقل ) اجرا بشه.
 

jhoseini

Member
یعنی واقعاً هیچ راهی غیر این دو روش نیست؟ راه اصولی تری برای این حالت پیشبینی نشده یعنی؟ به php نمیاد اینقدر دست و پا چلفتی باشه B-:
حتماً یه راهی هست
 

peyman1987

Member
جلال جان بخيال!!!!!

کد که نميتونه خودبخود اجرا بشه. Php‌هم که نميتونه يه جوري خودشو اجرا کنه. بالاخره يکي بايد اجراش کنه.
 
cron job مثل Scheduled Tasks ویندوزه. حالا چرا تنظیمات 1 ساعت 1 ساعت تنظیم شده به این خاطره که احتمالا تعدد اسکریپت ها در بازه های کم ضمن اینکه خود سرورها request های زیادی رو بصورت نرمال از کاربرها میگیرند باعث میشه عملا افت داشته باشیم (توی هرچیزی که در سیستم سرور نصبه )

احتمالا میشه کارهایی کرد بازهم میگردم مثلا shell نویسی یا command های لینوکس (البته من زیاد وارد نیستم صرفا یک چیزهایی خوندم) شاید باشه که بشه کار Scheduled Tasks ویندوز رو بصورت دستی تو لینوکس کرد ( !!! شاید، شاید !!! )

اما منطقی ترین جواب :
چك كردن زمان با باز كردن صفحه توسط كاربران

يعني هر كاربري صفحه رو باز كردن زمان چك شه بعد 10 دقيقه بود عمليات با باز كردن اون شخص انجام شه

و یا اینکه اگر به سرورهاتون خیلی اعتماد دارید:
اسکریپتی بنویسید که 50 دقیقه loop (وقفه) بخوره و هر 10 دقیقه ( 5 تا 10 دقیقه ) توی حلقه کد مورد نظر خودتون رو چک کنه. ولی در عمل فکر کنم نصف cpu های هاستینگ های ماها جواب همچین کاری رو نده.

یک چیز دیگه اینکه تا جایی که من یادم می آید یکی از هاست های اولیه ای که من باهاش کار می کردم گزینه دقت دقیقه رو هم توی cron job خود داشت. شاید این تنظیمات هم قابل تغییر باشه از طرف مدیر سرور.
زیاد شد! ببخشید. (چون موضوع رو دنبال می کردم گفتم چیزی گفته باشم)
 
آخرین ویرایش:

my friend

Member
داشتم پست ها رو میخوندم که ببینم راه حلی ارائه شده یا نه ، موقع خوندن پست دوست عزیزم، albusandharry راه حلی به ذهنم رسید که فکر میکنم مناسب باشه:

PHP:
<?

set_time_limit(3600);

function();
sleep(900);
function();
sleep(900);
function();
sleep(900);
function();

?>
چند مورد رو بگم بد نیست:
1. set_time_limit زمان اجرای برنامه رو تعیین میکنه... بهتره روی 3600 ثانیه (1 ساعت) تعیین بشه.
2. تابع function تابعی هست که باید هر 15 دقیقه یکبار انجام بشه.این تابع رو 4 بار اجرا کنید (مثل مثال بالا) و cron jobs رو روی 1 ساعت تنظیم کنید.
3. تابع sleep رو 3 بار اجرا کنید (مثل مثال بالا ، لازم نیست 15 دقیقه اضافی از سرور کار بکشید!)
4. اگه میخواهید برنامه دقیقتر باشه ، ببینید چقدر طول میکشه تا تابع function اجرا بشه (با تابع microtime)، زمان بدست آمده رو از 900 کم کنید و به عنوان آرگومان تابع sleep استفاده کنید...
5. تابع sleep بار اضافی زیادی روی سرور قرار نمیده... شاید این الگوریتمی که نوشتم بهترین جایگزین برای cronjobs باشه... البته با توجه به مشکل شما!
6. ممکنه یه مشکلی بوجود بیاد: اگه برنامه مثلا ساعت 3:00 اجرا بشه ، ساعت 3:15 و 3:30 و 3:45 هم باید اجرا بشه ، اما اگه سرور ساعت 3:10 ریستارت بشه ، باید صبر کنید تا cronjobs دوباره اسکریپت رو اجرا کنه!
7. خوش باشید!
 
آخرین ویرایش:

jhoseini

Member
اینا راه حل نمیشه، این سوال رو باید از لینوکس کار ها پرسید، و باید به چیزی غیر از php روی لینوکس متوسل شد
 
خیلی عالی بود. دقیقاً منظور همین بود. البته تست کردم و مطمئن شدم که احتمال غریب به یقین بدون مشکل جوابگو خواهد بود. (به درد من که میخوره: برای ارسال با وقفه خبرنامه هام به ایمیل ها با همین فرمول 1 ساعت و هر ده دقیقه 50 تا 50 تا )

اینم تصویر درصد کارکرد cpu (معمولی) : :)

2uotglj.gif


با تشکر​

اینا راه حل نمیشه، این سوال رو باید از لینوکس کار ها پرسید، و باید به چیزی غیر از php روی لینوکس متوسل شد
جواب میده ها! البته راست میگی اگه از طریق سرور راه حل بهتری باشه باز بهتره. (اما خوب اینهم کلکیه که cron job رو استفاده میکنی 1 ساعت به 1 ساعت اما ده دقیقه ده دقیقه ! < چی شد؟ > )
 
آخرین ویرایش:

hba

Active Member
اقا اينها جواب نيست
چون بايد صفحه وا باشه كه Sleep كار كنه مي خواهيم صفحه باز نباشه و خودش كار كنه

تنها راه :
كرون جاب
استفاده از بازديد كنندگان


اگر با لينوكس هم حتي bash script هم بنويسيم ارزش نداره چون اين همون cron ميشه ديگه
 
اقا اينها جواب نيست
چون بايد صفحه وا باشه كه Sleep كار كنه مي خواهيم صفحه باز نباشه و خودش كار كنه

تنها راه :
كرون جاب
استفاده از بازديد كنندگان


اگر با لينوكس هم حتي bash script هم بنويسيم ارزش نداره چون اين همون cron ميشه ديگه

مگه غیر از اینه که از cron job استفاده شده در این راه حل. به استثنای اینکه دیگه زحمت بازکردن صفحه با کاربر یا مدیر نیست. خود سرور هر 1 ساعت اینکارو میکنه؟!!
 

hmarei

New Member
ببينم ؟؟؟؟

داشتم پست ها رو میخوندم که ببینم راه حلی ارائه شده یا نه ، موقع خوندن پست دوست عزیزم، albusandharry راه حلی به ذهنم رسید که فکر میکنم مناسب باشه:

PHP:
<?

set_time_limit(3600);

function();
sleep(900);
function();
sleep(900);
function();
sleep(900);
function();

?>
چند مورد رو بگم بد نیست:
1. set_time_limit زمان اجرای برنامه رو تعیین میکنه... بهتره روی 3600 ثانیه (1 ساعت) تعیین بشه.
2. تابع function تابعی هست که باید هر 15 دقیقه یکبار انجام بشه.این تابع رو 4 بار اجرا کنید (مثل مثال بالا) و cron jobs رو روی 1 ساعت تنظیم کنید.
3. تابع sleep رو 3 بار اجرا کنید (مثل مثال بالا ، لازم نیست 15 دقیقه اضافی از سرور کار بکشید!)
4. اگه میخواهید برنامه دقیقتر باشه ، ببینید چقدر طول میکشه تا تابع function اجرا بشه (با تابع microtime)، زمان بدست آمده رو از 900 کم کنید و به عنوان آرگومان تابع sleep استفاده کنید...
5. تابع sleep بار اضافی زیادی روی سرور قرار نمیده... شاید این الگوریتمی که نوشتم بهترین جایگزین برای cronjobs باشه... البته با توجه به مشکل شما!
6. ممکنه یه مشکلی بوجود بیاد: اگه برنامه مثلا ساعت 3:00 اجرا بشه ، ساعت 3:15 و 3:30 و 3:45 هم باید اجرا بشه ، اما اگه سرور ساعت 3:10 ریستارت بشه ، باید صبر کنید تا cronjobs دوباره اسکریپت رو اجرا کنه!
7. خوش باشید!


ببين هر يك ساعت سرور با كران جاب چك كنه آيا اين اسكريپت كارش رو روي 10 دقيقه انجام ميده ؟
براي مثال همون كدهارو طوري بنويس كه هر 10 دقيقه فايل example.php اجرا بشه !
 

hba

Active Member
اقا يه راه ديگه پيدا كردم

يك سري سايت هستند جهاني كارشون لينك از تو ميگيرند و بازه ززماني برات رانش مي كنند خيلي توپ بود
سرچ كردم free cron job site
 

my friend

Member
hmarei گفت:
ببين هر يك ساعت سرور با كران جاب چك كنه آيا اين اسكريپت كارش رو روي 10 دقيقه انجام ميده ؟
براي مثال همون كدهارو طوري بنويس كه هر 10 دقيقه فايل example.php اجرا بشه !
PHP:
<? 

set_time_limit(3600); 

function(); 
sleep(600);
function(); 
sleep(600);
function(); 
sleep(600);
function(); 
sleep(600);
function(); 
sleep(600);
function(); 

?>
شاید بهتر باشه از این روش استفاده کنید:
hba گفت:
اقا يه راه ديگه پيدا كردم

يك سري سايت هستند جهاني كارشون لينك از تو ميگيرند و بازه ززماني برات رانش مي كنند خيلي توپ بود
سرچ كردم free cron job site
 

greyzero

New Member
يك راه ديگه
چك كردن زمان با باز كردن صفحه توسط كاربران

يعني هر كاربري صفحه رو باز كردن زمان چك شه بعد 10 دقيقه بود عمليات با باز كردن اون شخص انجام شه

كار رفرش سايت رو به عهده ي كاربران بازديد كننده گذاشتن خيلي جالب نيستش . چون سرعت لود صفحه براي اونا پائين مي ياد . به نظر من اين ايراد به اين روش وارده . البته نه همه جا و نه براي هر برنامه اي .
 

جدیدترین ارسال ها

بالا