سلام میخوام یک فانکشن به صورت منظم مثلا هر 3 ثانیه در php اجرا بشه
راه حلی هست؟
شاید پاسخ شما همینجا باشد
@amirmahdavinejad
سلام و وقت بخیر.
یکی توی quora نوشته بود اولین سوال اینه که چرا اصلا میخواید یه چنین کاری رو انجام بدید؟ :) و درست گفته چون php اصلا برای این کار ساخته نشده و این راه حل که در ادامه میاد ، فقط برای حالت CLI باید استفاده بشه نه داخل سایت:
ignore_user_abort(true);//Run in persistent mode
set_time_limit(0);//Run infinitely
while (true)
{
//==do your rest of works here.
echo "Current timestamp is: ".time().PHP_EOL;
flush();//buffer output
sleep( 10 );//for wait 10 seconds
}
موفق و سلامت باشید
یا حق
اگه تمایلی ندارید از supervisor و سرویسهای مشابه استفاده کنید میتونید به شکلهای مختلف از crontab خود سرور استفاده کنید(روی اوبونتو سرور به طور پیشفرش وجود داره).
حالا برای این کار باید چنتا عامل رو در نظر بگیرید. در مرحلهی اول لازمه ببینید روی سروری که دارید این تسک در چه زمانی انجام میشه، زمان انجام شدن این تست روی سرور بسته به سخت افزاری که در اختیارتون قرار گرفته به طور قطع با لوکال متفاوت خواهد بود و شاید حتی ببینید انجام شدن این تست خیلی بیشتر از اون چیزی که انتظار داشتید طول میکشه!
وقتی که زمان انجام شدن رو پیدا کردید، حالا باید یه حاشیهی امن هم بهش اضافه کنید که اگه یه زمانی لود سرور رفت بالا و این زمان بییشتر شد ایجاد تداخل نکنه.
حالا میتونید با دو روش پیاده سازی کنید:
1- همون طوری که اقای قربانی فرمودن و با یه حلقهی بی نهایت، با یه فرمان اسکریپت رو دائمی اجرا کنید. این روش مناسب بعضی کاربرداست.
2-sleep time رو توی خود crontab تعریف کنید. اینجوری سیستم درگیر یک حلقهی بینهایت نمیشه و فشار کمتری روش میاد که برای بعضی کاربردای دیگه مناسبه.
یعنی به این شکل مثلا:
* * * * * sleep 3; your command
* * * * * sleep 6; your command
و همین طور ادامه دار
همون طور که میبینید این روش دوم برای زمانهای خیلی کوتاه چندان مناسب نیست چون باید تعداد زیادی کران تعریف کنید.