PDA

View Full Version : بهترین راه برای اجرا خودکار اسکریپت بمدت طولانی



bobSilon
سه شنبه 30 اردیبهشت 1393, 12:45 عصر
سلام
بنده میخوام که یک اسکریپت سمت سرور به صورت خودکار اجرا بشه و اطلاعاتی رو از یک سرور که بصورت json هست رو دریافت کنه و داخل پایگاه داده بریزه.
اگه بخوایم این اسکریپت در طول روز و هر 1.5 دقیقه اجرا بشه (حدودا 960 بار برای هر 24 ساعت) چه راهی رو پیشنهاد میدید که کمترین فشار رو روی سرور بیاره؟

روشهایی که پیدا کردم ایناس:
- یک حلقه بینهایت بزاریم و هر 1.5 دقیقه کارهای خواسته شده رو بکنه(که فکر کنم صاحب سرور بیاد دم خونمون چندتا لیچار بارم کنه :لبخند:)
- استفاده از cron job
- استفاده از shell script

از این دوتای آخری هیچی نمیدونم فقط یه جا خوندم که این روش ها رو پیشنهاد داده بود.
*چیزی که مهمه اینه که قراره این اسکریپت در طول روز و به مدت طولانی حداقل 1 سال تکرار بشه و ترسم از اینه که منابع سرور رو بیش از حد درگیر خودش کنه!


حالا با توجه به این توضیحات کدوم روش به نظرتون بهتره؟ اگه روش های دیگه ای هم هست خوشحال میشم بگید.

mfaridi
سه شنبه 30 اردیبهشت 1393, 13:25 عصر
مشکل منم دقیقا همینه ولی مال من کاربر مشخص میکنه هر چند دقیقه یکبار

Mori Bone
سه شنبه 30 اردیبهشت 1393, 14:30 عصر
کسی نیس جواب بده:افسرده:

Veteran
سه شنبه 30 اردیبهشت 1393, 15:05 عصر
خب بالاخره اون دیتابس داره ی طوری رکورد توش درج میشه
شما بیا قبلا و یا بعد از درج اطلاعات، همون اطلاعات رو در قالب جیسیون به صورت پست یا گت بفرست به ی صفحه ایی، بعد توی اون صفحه وصل شو به دیتابیس و اطلاعاتی که اومده رو درج کن توی دیتابسس دومیه.
اینجوری هزموقعه دیتابیس اولی اپدیت بشه، دومی هم اپدیت میشه.
فشاری هم به سرور نمیاد

bobSilon
سه شنبه 30 اردیبهشت 1393, 15:34 عصر
خب بالاخره اون دیتابس داره ی طوری رکورد توش درج میشه

ببینید هیچ لینک یا دکمه submit و ...ای نیست که بشه اسکریپت رو از طریق اون صدا کنیم تا اجرا بشه و داده رو تو دیتابیس بریزه.
مشکل اصلی اینجاس که این اطلاعات رو از طریق api یه سرویس دهنده دریافت میکنیم که تعداد درخواست ها رو در روز به 1000 تا محدود کرده.
فقط لازمه که این اسکریپت تو زمان های تعیین شده خودش اجرا بشه، اطلاعات رو بگیره و ذخیرشون کنه.

joker
سه شنبه 30 اردیبهشت 1393, 17:15 عصر
<?phpset_time_limit(50);$i=1;while ($i<=400){echo "<BR>";$date = new DateTime();print_r( $date->format('U = Y-m-d H:i:s') . "\n");echo $i; sleep(1); $i++;}echo " end ";?>



برای زمان طولانی 24 ساعت تست نکردم
اسکریپت php بعد از یک مدت زمان مشخص اگه فعال باشه بسته میشه ولی شاید از روش استفاده تو در تو ( خودش مجددا خودش را صدا بزنه) استفاده کنی شاید بشه ( شایدم به مشکل بر بخوره )
نمیدونم خلاصه ، روش بالا را تست کن خبرشو به ما هم بده

bobSilon
سه شنبه 30 اردیبهشت 1393, 17:56 عصر
نه داداش اینم جواب نمیده. حلقه ها تو مدت زمان اجراشون یه درصدی از منابع رو مصرف میکنن، فکر کنم sleep هم بزاریم زیاد توفیری نکنه چون به هر حال حلقه در حال اجراس. حالا شما فکر کن بعد از یک سال چه بلایی سر این حلقه تو در تو میاد. :دی

از چیزایی که امروز تا الان خوندم، به نظرم cron job راه حل این مسئله باشه.

joker
سه شنبه 30 اردیبهشت 1393, 20:39 عصر
خب شما در هر حالتی باید یک پروسه فعال داشته باشی که زمان را برات نگه داره و بدونه از درخواست آخر t ثانیه گذشته. از رو هوا که قرار نیست خودبخود اجرا بشه :)
مطمئن ترین حالت اینه که دسترسی کاملی به سرورت داشته باشی و بتونی یک سرویس توش اجرا کنی که هر t ثانیه یکبار اسکریپت را فراخوانی بکنه.
ولی در هر حال این پروسه باید باشه و خواه ناخواه مقداری بار روی سرور میزاره ولی میزانش اینقدر کم هست که اصلا به چشم نیاد

numberone1
سه شنبه 30 اردیبهشت 1393, 22:26 عصر
چه کاریه از حلقه های تو در تو php استفاده کنید!!! یک intval بزارید تو jquery یک زمان هم براش مشخص کنید سر ساعت اجرا میشه هیچ فشاری هم نمیاره
من استفاده کردم مشکلی نداره :)