PDA

View Full Version : سوال: اجرای اسکریپت در سمت سرور در پشت صحنه



asmanmmsj
پنج شنبه 19 اسفند 1389, 21:41 عصر
سلام
من یه برنامه ای رو به زبان php نوشتم و کارش پردازش و محاسبه داده ها و ارسال در زمانهای تعیین شده به کاربران هست تقریبا نیاز دارم به حالتی که برنامه 24 ساعته رو سرور اجرا باشه تا سر ساعتهای تعیین شده کار ارسالو انجام بده
راهی که به نظر رسید و اجرا کردم این بود که بعد از اجرای صفحه وب با کد زیر کانکشن را میبستم و پشت صحنه کار را شورع به انجام میدادم ولی یه مشکل هست که رو سرور ها زمان اجرا بالاخره متوقف میشه و نمیزاره پروسه ادامه داشته باشه
کد بستن کانکشن از طرف کلاینت و اجرا ادامه برنامه در پشت صحنه
ob_end_clean();
header("Connection: close\r\n");
header("Content-Encoding: none\r\n");
ignore_user_abort(true); //optional
ob_start();
echo start;
header("Content-Length: " . ob_get_length());
ob_end_flush(); //Strange behaviour, will not work
flush(); //Unless both are called !
ob_end_clean();


برای رفع این مشکل من یه تیکه کد دیگه گذاشتم که هر از 5 دقیقه پروسه خود را فراخوانی میکنه با پارامتر و خودش خارج میشه
ولی نمیدونم از لحاظ فنی چه قضیه ای پشتش هست که بعد از چند ساعت یا کمتر کار کردن کل آپاچی از کار میفته و میشه گفت سرور از کار میوفته لازم به ذکر هست که من کار زیادی در این مدت نمیخوام انجام بده فقط یه حلقه هست که داخلش 1 دقیقه sleep و بعد چک کردن زمان برای اجرای کد خاص و دوباره sleep
ولی این کار که فکر نکنم روی cpu هم فشاری داشته باشه باعث میشه سرور کلا از دسترس خارج میشه

حالا بعد این همه که سرتونو دردآوردم میخواستم بدونم راه حلی وجود داره برای اجرای برنامه در چنین حالتی؟

مثلا این بازی های انلاین چطور کدشون همیشه روی سرورها در حال اجرا و پردازش هست؟

mtchabok
جمعه 20 اسفند 1389, 08:42 صبح
راه حل شما استفاده از cronjob هس که در همین فروم دوستان توضیحاتی در موردش دادن ...

amir001
جمعه 20 اسفند 1389, 21:23 عصر
من هم چنین کاری میکردم که روی سرور پروسه ها زیاد میموندن و گاهی رم سرور را پر میکردن و کرش میکرد.
برای این کار از cronjob میتونی استفاده کنی که در سرور های که از سیستم مدیریت cpanel استفاده میکنند، خود پنل مدیریت قسمتی برای تنظیمات اون داره. فقط روی بعضی از سرور ها مدیر سرور فایل کانفیگ اون را میبنده و نمیتونی cronjob فعال کنی.

asmanmmsj
شنبه 21 اسفند 1389, 12:07 عصر
سلام دوستان خیلی ممنون از راهنمایی هاتون مشکل من حل شد
برای تشکر کل قضیه را همینجا مینویسم که سایر دوستان هم استفاده کنن
cron job رو پنل های cpanel وجود دارد پس بهتره از سروهای که cpanel دار استفاده کنید.
تو cpanel تو بخش advanced گزینه Cron Jobs رو میزنین
67391
تو این بخش دوره زمانی را مشخص میکنین
67392
و دستوری رو که میخوایین تو بخش مربوطه مینویسین
الان هدف من اجرای یک اسکریپت خاص در هر دوره یک دقیقه ای بود که تنظیمات را انجام دادم و از curl برای فراخوانی آدرس اسکریپت خودم استفاده کردم البته اگر روی سروری که curl فعال نباشد میتونید از wget استفاده کنید و اگر غیر فعال لاشند اید با مدیر سرور (که شاید خودتون باشید) هماهنگ کنید تا مشکلو براتون حل کنه

یک نکته دیگه برای اینکه خروجی از اسکریپت تو سرور جا نمونه از کد
>/dev/null 2>&1
در انتهای دستورتون استفاده کنین تا هم خود خروجی و هم احیانا اگر خطایی باشد فیلتر شود

با تشکر:چشمک:

iner30
یک شنبه 20 اسفند 1391, 15:32 عصر
پنل من دایرکت ادمین هستش ، هرچی گشتم پیدا نکردم از کجا فعال میشه
تو راهنمای دایرکت نوشته آیکون cron هست ولی واسه من نیست ، البته نسخه ام هم فرق داره

rezaonline.net
یک شنبه 20 اسفند 1391, 16:44 عصر
مدیر هاستتون براتون غیرفعال کرده

Unique
دوشنبه 21 اسفند 1391, 01:41 صبح
اگه cron job خطا داد یا توی پنل هاتون نبود با یه ticket به مدیر هاست براتون انجام میدهند ! یعنی از وظایف یه هاست حداقلی هستش !