PDA

View Full Version : آپدیت خودکار فایل php



mortezaaa
جمعه 13 مرداد 1391, 13:08 عصر
سلام و عرض ادب
دوستان عزیز
من یه برنامه دارم کارش ارسال پیامک هستش وقتی اطلاعات تو بانک ثبت شد برنامه باید بصورت خودکار تشخیص بده و شروع به ارسال کنه بدونه اینکه کاربر درگیر ارسال پیام بشه

یعنی در واقعه میشه یه فایل رو در نظر گرفت که هر لحظه از بانک کوئری میزنه و تعداد سطرهای جدید رو میگیره و شروع میکنه به ارسال حالا مشکلی که من دارم اینکه چطوری این برنامه رو ران کنم با cron job این کار رو کردم ولی فرض کنید یه کاربری آمد صد هزار تا پیامک ثبت کرد و چند تا کاربر دیگه هم پشتش امدن ثبت کردن حالا اگه از طریق cron job باشه باید هر یک دقیقه صبر کنیم پیامک بره و مدت زیادی پیامک ها تو صف ارسال میمونند که اصلا خوب نیست

پیشنهاد شما برای این مشکل چیه؟
با مدیر یکی از سایت های پیامکی ثبت کردم ایشون به طور سربسته گفتن باید از طریق ssh ارسال کنید
یعنی یه دستور حلقه بی نهایت نوشته بشه که هر لحظه مقادیر رو چک کن و شروع کنه به ارسال تا زمانی که به صفر رسید به خودش یه استراحت بده و دوباره شروع کنه به ارسال

ممنون میشم تو این زمینه راهنمایم کنید

mortezaaa
جمعه 13 مرداد 1391, 16:20 عصر
دوستان یکی جواب منو بده واقعا نیاز دارم
ممنون

Unique
جمعه 13 مرداد 1391, 18:39 عصر
نیاز به ssh نیست ! برای ارسال پیامک شما مثلا باید به web service رهیاب وصل بشین و ارسال کنین. من تا حالا نشندیم SSH بچنین کاری انجام بده ! (که قطعا نمیده و شما را گمراه کردن)
اگه بخواهین در لحظه درخواست کاربر همه پیامک ها را بفرستین که مجبورین چند درخواست را با هم اجرا کنین که فشار زیادی روی سرور میگذاره ! شاید هم کمی کار شما را کند کنه ! اما میتونین به هر لیستی که ارسال میشه یک priority بدین و لیست ها به صورت صف پشت هم باشند و شما به ترتیب تا آخر ارسال ها را انجام بدین ! نیاز هم به cron job نیست بگذارین کاربر خودش درخواستش را start کنه ! زمان start از طریق یک flag چک کنین اسکریپت در حال اجرا هستش یا نه و اگه نبود اسکریپت را اجرا کنین ! بقیه اتوماتیک ارسال میشن!

mortezaaa
جمعه 13 مرداد 1391, 18:57 عصر
تشکر
فعلا هم همین کار رو میکنم برای ارسال اس ام اس ولی برای زمانبندی شده چی کار میکنید مجبوریم باز دوباره تایم بزنیم پیشنهادت روی زمانبندی شده چیه؟

mortezaaa
جمعه 13 مرداد 1391, 19:09 عصر
اگه بامدیران مگفا یا رهیاب صحبت کنید همشون میگن نزارید کاربر ارسال پیام کوتاه کنه یعنی وقتی کاربر ارسال رو زد بگه ارسال شد دیگه کاربر پشت ارسال نزارید برای همین میگن یه برنامه ای بنویسد که همیشه در حال اجرا باشه و کارش ارسال پیامک هستش

Unique
شنبه 14 مرداد 1391, 12:35 عصر
فعلا هم همین کار رو میکنم برای ارسال اس ام اس ولی برای زمانبندی شده چی کار میکنید مجبوریم باز دوباره تایم بزنیم پیشنهادت روی زمانبندی شده چیه؟

بخشی از پست من را نخوندین ! فکر کن کاربر A دکمه ارسال را زد و اولین کاربر شماست حالا اسکریپت بر اساس مانده sms توی پایگاه داده شروع میکنه با منطق شما ارسال میکنه ، توی این فاصله ممکنه 10 نفر بیان و 12 تا لیست دیگه اضافه کنند ممکنه هیچ کس هم نیاد ! حالا پس از اتمام ارسال های اول شما دوباره لیست میگیری ! اگه اون 12 تا ایجاد شده بود که دوباره ارسال شروع میشه اگه هم نه که خاتمه پیدا میکنه تا یه نفر دیگه start کنه ! اینجوری دیگه cron jobs نمیخواد. البته شخصا این کار را روی سرویس های Shared انجام ندادم (برای یک کاربر چرا ولی نا محدود نه) بلکه روی سرویس دهنده های virtual اون هم با استفاده از یک نرم افزار pascal که به مشکل timeout و web server و اینا نخورم !

موفق باشی

mortezaaa
شنبه 14 مرداد 1391, 12:45 عصر
ممنون
ببین الان اینجا مشکل زمان آینده دوباره هستش
من دقیقا همین کار رور برای سیستم خودم دارم انجام میدم ولی باز مشکل زمان هستش

Unique
شنبه 14 مرداد 1391, 15:37 عصر
ببین الان اینجا مشکل زمان آینده دوباره هستش
یعنی چی زمان آینده ؟ اگه اسکریپت در حال اجرا باشه که آخر loop مربوط به لیست جاری دوباره لیبست ها را چک میکنه و اگه چیزی بود از ادامه میده ! و همینطور loop میکنه که چیزی نباشه ! وقتی هم کاربر جدید start کرد دوباره به جریان میفته ! شما فقط چک میکنی اسکریپت در حال اجرا هست یا نه (مثلا توی یک فایل یا فیلدی از database یک flag بگذار که مطمئن بشی) اگه بود که هیچی اگه نبودم اجراش میکنی ! دیگه cron job نمیخواد !

mortezaaa
شنبه 14 مرداد 1391, 16:54 عصر
تشکر
flag چطوری کار میکنه؟
اینکه الان میگی این طوری میشه
کاربر اطلاعاتشو ثبت کرد برنامه بره برای ارسال بعد هرچی پیام بود ارسال کنه؟ یا کوئری برای اون کاربر بزنم که هرچی ارسال برای اون کاربر بود ارسال کنه؟
منظور از زمان این طوری میشه کاربر میاد میازه برای یک هفته دیگه ساعت مثلا ده شب ارسال بشه امکان داره اون زمان اصلا کاربری نداشته باشیم که بخواد ارسال رو استارت کنه؟

ممنون میشم کمک کنی

Unique
شنبه 14 مرداد 1391, 19:39 عصر
خوب حالا قضیه فرق کرد ! کاربر شما میتونه trigger بگذاره ! یعنی بگه چه زمانی ارسال انجام بشه ! تنها کاری که میتونین بکنین همون cron jobs هستش ! البته باید خودتون با php اون cron job را ایجاد کنین !
اما اگه یک برنامه غیر اسکریپتی بنویسین خیلی راحت میشه با یک timer ساده ارسال ها را در وقت خودشون انجام داد ! اما برای php تنها راه همون cron jobs هستش.

hassanzanjani1374
یک شنبه 15 مرداد 1391, 04:32 صبح
ای سوال برای من هم پیش اومد . اگر سیستم عامل لینوکس باشه میشه حلقه رو با بش یا آی پی تیبل نوشت و بعد با اون یه کد پی اچ پی رو فراخوانی کرد ؟ استفاده از سرور در مقایسه با پی اچ پی و کرون جاب چی ؟

mortezaaa
سه شنبه 17 مرداد 1391, 19:49 عصر
تشکر
با cron job که باز دوباره مجبوریم هر دقیقه چک کنیم
به نظر خودم حلقه بی نهایت بهترین راه می تونه باشه البته یه دستوری بود که فایل رو همیشه اجرا میکرد چی بود؟

البته گفتید برنامه غیر اسکریپتی مثلا با چه بازبونی میشه؟ و نمونه دارید معرفی کنید تشکر