-
August 28th, 2020, 22:10
#1
مشکل در اجرای اسکریپت با کرون جاب
سلام و درود
یه اسکریپت php دارم که باید همیشه در حال اجرا باشه.
اینو به کرون جاب گفتم هر دقیقه اجراش کنه.
مشکل اینجاست که فقط یه بار میخوام اجرا بشه و اگر در حال اجرا باشه دیگه کرون جابه اجراش نکنه. این مورد رو چطور باید هندل کرد؟
دسترسی به سرور ندارم و هاست سی پنل هست.
دوستان اگر راه حلی به ذهنتون میرسه لطفا به اشتراک بذارید.
سپاس
-
-
August 28th, 2020 22:10
# ADS
-
August 28th, 2020, 23:26
#2
عضو انجمن
پاسخ : مشکل در اجرای اسکریپت با کرون جاب
سلام
کلیدواژه های crontab doesn't run if already running رو در گوگل می تونید سرچ کنید و نتایج رو مطالعه کنید.
معمولا امکان اجرای فایل بش یا دستورات اون رو دارید چون کرون جاب کامندهای لینوکس رو اجرا می کنه.
نتایج رو چک کنید ببینید امکان و دسترسی اجرای اون ها رو دارید یا خیر.
-
تعداد تشکر ها از SaeedFazlollahzadeh به دلیل پست مفید
-
August 29th, 2020, 01:25
#3
پاسخ : مشکل در اجرای اسکریپت با کرون جاب

نوشته اصلی توسط
SaeedFazlollahzadeh
سلام
کلیدواژه های 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
-
-
August 29th, 2020, 20:03
#4
پاسخ : مشکل در اجرای اسکریپت با کرون جاب
بهتره زمان اجرای کران جاب محدود باشه و مشخص
مثلا کران جاب نهایتا 5 دقیقه فعال باشه و هر 5 دقیقه مجدد اجرا بشه
البته باید max_execution_time هم در نظر بگیری که از تایم اجرات کمتر نباشه
-
تعداد تشکر ها از hamid53214 به دلیل پست مفید
-
August 29th, 2020, 20:27
#5
پاسخ : مشکل در اجرای اسکریپت با کرون جاب

نوشته اصلی توسط
hamid53214
بهتره زمان اجرای کران جاب محدود باشه و مشخص
مثلا کران جاب نهایتا 5 دقیقه فعال باشه و هر 5 دقیقه مجدد اجرا بشه
البته باید max_execution_time هم در نظر بگیری که از تایم اجرات کمتر نباشه
درود بر شما
والا نمیخوام اونطور باشه که هر مثلا 5 دقیقه با max_execution_time محدود کنم اجراش رو دوباره کرون جاب اجراش کنه. میخوام که اگر در حال اجرا نبود کرون جاب اجراش کنه.
علتش هم اینه که تا اسکریپت کامل راه اندازی بشه 30 ثانیه زمان میبره و نمیخوام این 30 ثانیه هر 5 دقیقه هی تکرار بشه.
-
-
August 29th, 2020, 20:48
#6
عضو دائم
پاسخ : مشکل در اجرای اسکریپت با کرون جاب
باسلام، شما اول اسکریپت بزن یک فایل run بسازد، زمان اتمام کار هم فایل run پاک کند. سپس قبل اجرای اسکریپت چک کنید اگر فایل run موجود بود exit کنید.
-
تعداد تشکر ها از T.Toosi به دلیل پست مفید
-
August 29th, 2020, 22:16
#7
پاسخ : مشکل در اجرای اسکریپت با کرون جاب

نوشته اصلی توسط
T.Toosi
باسلام، شما اول اسکریپت بزن یک فایل run بسازد، زمان اتمام کار هم فایل run پاک کند. سپس قبل اجرای اسکریپت چک کنید اگر فایل run موجود بود exit کنید.
درود بر شما
بله دقیقا من معمولا همین کار رو میکنم ولی یه بار سرور ریست شد و در نتیجه اسکریپت از کار افتاد.
دنبال راهی هستم که در صورت متوقف شدن ناگهانی اسکریپت کرون جاب دوباره سریعا اجراش کنه.
-
-
August 30th, 2020, 14:55
#8
عضو دائم
پاسخ : مشکل در اجرای اسکریپت با کرون جاب

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

نوشته اصلی توسط
T.Toosi
باسلام، اگر دسترسی روت سرور دارید از @reboot داخل crontab استفاده کنید، به طور مثال اگر اسکریپت در حال اجرا بود و سرور ریبوت شد، فایل run میمونه و دفعه بعدی اسکریپت exit میشه. یک اسکریپت دیگه بنویسید که کارش فقط پاک کردن فایل run باشد بعد کرون زیرو اضافه کنید، اگر دسترسی روت ندارید تنها چیزی که به فکرم میرسه اینه که یک اسکریپت دیگه بزنید تایم فایل (اختلاف created با تایم حال) run چک کنه، مثلا اگر بیشتر از 5 دقیقه بود پاک کند.
کد:
@reboot php deleteRun.php
والا دسترسی روت ندارم ولی چیزی که فرمودید رو اینطور برداشت کردم.
یعنی من توی هر لوپ اسکریپت اصلی بیام فایل ران رو تاچ کنم بعد اون یکی اسکریپت اگر 5 مین از آخرین تاچ شدن فایل گذشته بود run رو حذف کنه؟
-