PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مشکل در اجرای اسکریپت با کرون جاب



esi20
August 28th, 2020, 22:10
سلام و درود

یه اسکریپت php دارم که باید همیشه در حال اجرا باشه.

اینو به کرون جاب گفتم هر دقیقه اجراش کنه.

مشکل اینجاست که فقط یه بار میخوام اجرا بشه و اگر در حال اجرا باشه دیگه کرون جابه اجراش نکنه. این مورد رو چطور باید هندل کرد؟

دسترسی به سرور ندارم و هاست سی پنل هست.

دوستان اگر راه حلی به ذهنتون میرسه لطفا به اشتراک بذارید.

سپاس

SaeedFazlollahzadeh
August 28th, 2020, 23:26
سلام
کلیدواژه های crontab doesn't run if already running رو در گوگل می تونید سرچ کنید و نتایج رو مطالعه کنید.
معمولا امکان اجرای فایل بش یا دستورات اون رو دارید چون کرون جاب کامندهای لینوکس رو اجرا می کنه.
نتایج رو چک کنید ببینید امکان و دسترسی اجرای اون ها رو دارید یا خیر.

esi20
August 29th, 2020, 01:25
سلام
کلیدواژه های crontab doesn't run if already running رو در گوگل می تونید سرچ کنید و نتایج رو مطالعه کنید.
معمولا امکان اجرای فایل بش یا دستورات اون رو دارید چون کرون جاب کامندهای لینوکس رو اجرا می کنه.
نتایج رو چک کنید ببینید امکان و دسترسی اجرای اون ها رو دارید یا خیر.

ممنونم بابت توجهتون. با سرچ کلید واژه ای که فرمودید به تابعی به نام flock رسیدم و متوجه نشدم شیوه عملکردش رو.




$f = fopen('lock', 'w') or die ('Cannot create lock file');
if (flock($f, LOCK_EX | LOCK_NB)) {
// yay
}



به عنوان مثال داخل کد بالا دقیقا چه اتفاقی داره میوفته.
اون فایل lock که ساخته میشه دسترسی بهش توسط سایر پروسس ها قفل میشه یا فایل PHP ای که داخلش این کد هست؟

لطفا هر کدوم از دوستان که اطلاعی راجع به flock داره راهنمایی کنه >:D

hamid53214
August 29th, 2020, 20:03
بهتره زمان اجرای کران جاب محدود باشه و مشخص
مثلا کران جاب نهایتا 5 دقیقه فعال باشه و هر 5 دقیقه مجدد اجرا بشه
البته باید max_execution_time هم در نظر بگیری که از تایم اجرات کمتر نباشه

esi20
August 29th, 2020, 20:27
بهتره زمان اجرای کران جاب محدود باشه و مشخص
مثلا کران جاب نهایتا 5 دقیقه فعال باشه و هر 5 دقیقه مجدد اجرا بشه
البته باید max_execution_time هم در نظر بگیری که از تایم اجرات کمتر نباشه

درود بر شما

والا نمیخوام اونطور باشه که هر مثلا 5 دقیقه با max_execution_time محدود کنم اجراش رو دوباره کرون جاب اجراش کنه. میخوام که اگر در حال اجرا نبود کرون جاب اجراش کنه.
علتش هم اینه که تا اسکریپت کامل راه اندازی بشه 30 ثانیه زمان میبره و نمیخوام این 30 ثانیه هر 5 دقیقه هی تکرار بشه.

T.Toosi
August 29th, 2020, 20:48
باسلام، شما اول اسکریپت بزن یک فایل run بسازد، زمان اتمام کار هم فایل run پاک کند. سپس قبل اجرای اسکریپت چک کنید اگر فایل run موجود بود exit کنید.

esi20
August 29th, 2020, 22:16
باسلام، شما اول اسکریپت بزن یک فایل run بسازد، زمان اتمام کار هم فایل run پاک کند. سپس قبل اجرای اسکریپت چک کنید اگر فایل run موجود بود exit کنید.

درود بر شما

بله دقیقا من معمولا همین کار رو میکنم ولی یه بار سرور ریست شد و در نتیجه اسکریپت از کار افتاد.
دنبال راهی هستم که در صورت متوقف شدن ناگهانی اسکریپت کرون جاب دوباره سریعا اجراش کنه.

T.Toosi
August 30th, 2020, 14:55
درود بر شما

بله دقیقا من معمولا همین کار رو میکنم ولی یه بار سرور ریست شد و در نتیجه اسکریپت از کار افتاد.
دنبال راهی هستم که در صورت متوقف شدن ناگهانی اسکریپت کرون جاب دوباره سریعا اجراش کنه.

باسلام، اگر دسترسی روت سرور دارید از @reboot داخل crontab استفاده کنید، به طور مثال اگر اسکریپت در حال اجرا بود و سرور ریبوت شد، فایل run میمونه و دفعه بعدی اسکریپت exit میشه. یک اسکریپت دیگه بنویسید که کارش فقط پاک کردن فایل run باشد بعد کرون زیرو اضافه کنید، اگر دسترسی روت ندارید تنها چیزی که به فکرم میرسه اینه که یک اسکریپت دیگه بزنید تایم فایل (اختلاف created با تایم حال) run چک کنه، مثلا اگر بیشتر از 5 دقیقه بود پاک کند.


@reboot php deleteRun.php

esi20
August 31st, 2020, 00:48
باسلام، اگر دسترسی روت سرور دارید از @reboot داخل crontab استفاده کنید، به طور مثال اگر اسکریپت در حال اجرا بود و سرور ریبوت شد، فایل run میمونه و دفعه بعدی اسکریپت exit میشه. یک اسکریپت دیگه بنویسید که کارش فقط پاک کردن فایل run باشد بعد کرون زیرو اضافه کنید، اگر دسترسی روت ندارید تنها چیزی که به فکرم میرسه اینه که یک اسکریپت دیگه بزنید تایم فایل (اختلاف created با تایم حال) run چک کنه، مثلا اگر بیشتر از 5 دقیقه بود پاک کند.


@reboot php deleteRun.php

والا دسترسی روت ندارم ولی چیزی که فرمودید رو اینطور برداشت کردم.
یعنی من توی هر لوپ اسکریپت اصلی بیام فایل ران رو تاچ کنم بعد اون یکی اسکریپت اگر 5 مین از آخرین تاچ شدن فایل گذشته بود run رو حذف کنه؟