ساخت cronjob ساده با future

من قصد دارم برای یه کار خیلی ساده، یه cronjob خیلی ساده درست کنم و فکر میکنم هرچقدر دسترسیم به تنظیمات زمان‌بندی بیشتر باشه، راحتترم.
اکثر لایبرریهایی که برای اینکار پیدا میشه، به نظرم زیادی high level و قوی هستن. من میخوام یه کار ساده انجام بدم.

به نظرتون اگه از future استفاده کنم و کارم رو بندازم روی یه thread با وقفه‌ی طولانی، مشکلی به وجود نمیاد؟ (بیشتر منظورم از نظر مشغول نگه‌داشتن منابع سیستم هست)

برای اینکه سوالم واضح‌تر باشه:
کاری که قراره انجام بده، ریکوئست زدن به یه صفحه‌ی وب، با وقفه‌ی زمانی طولانی (مثلا هر ۲۴ساعت یک بار!) هست و مثلا اگه مشکلی وجود داشت، ۵دقیقه بعد دوباره امتحان کنه، اگه بازم نشد، یه log ثبت کنه که فلان تاریخ نتونستم جواب بگیرم.
خلاصه یه crawler خسته :grinning:


دسته‌بندی رو «عمومی» انتخاب کردم. اگه تاپیک کلوژری شد، منتقلش میکنم به بخش کلوژر.

Future برای کار async با بازه کم بهتره چون resource آزاد می شه بعد یک مدت.
چرا از cron یا یک queue استفاده نمی کنید؟

1 پسندیده

چون نمیدونم این جمله دقیقا یعنی چی :joy:
میشه یه کم بیشتر توضیح بدید؟

من تقریبا هیچی از cronjobها نمیدونم. بیشتر هدفم اینه که بفهمم best pratice توی این مورد چیه.

اینکه سیستم عامل هر روز اجراش کنه بهتره. حالا یا با cron که مطمئن تره یا اگر حوصله نداری یک دستور watch هست در یونیکس که هر چندوقت یکبار یک دستوری رو اجرا میکنه و خروجی (توی ترمینال) را به‌روز میکنه.
یک کد یا اسکریپتی میتونی بنویسی که اون برنامه‌ات رو اجرا کنه و خروجیش رو بگیره که اگر اونطور که میخواستی کار کرد تمام شه اگر نه یک sleep شاید بذاری و log کردن هم همونجا بنویسی. همانطور که سام گفت از صف هم میتونی استفاده کنی ولی حس میکنم برای نیازت مناسب نباشه.
به شخصه این کارا رو با زبان های سطح بالا مثل روبی و پایتون انجام میدم. میتونی اون اسکریپتی هم که گفتم برای لاگ و ران کردن رو با این زبان‌ها بنویسی و صرفا یک فایل jar برات ران کنه و خروجیش رو بگیره.

1 پسندیده

کرون در سطح سیستم عامل هست که یک کار دوره‌ای رو اجرا میکنه. زبان‌های برنامه نویسی هم با اون کار میکنن (کتابخانه‌هایی که مثلا هر فلان ساعت یک کاری را انجام میدن). صف را با ابزار های دیگه مثل مثلا redis استفاده میکنن و برای اون تلاش مجدد کردن ها و کارهای اضافه کردن مناسبه که فکر کنم نیاز نداری، اونم بخاطر برنامه‌ای که روزی یک بار فقط قراره ران بشه.

1 پسندیده

https://man7.org/linux/man-pages/man5/crontab.5.html
Cron job با استفاده از crontab در سیستم عامل یک برنامه رو اجرا میکنه . این برنامه میتونه هرچی باشه وزمان بندی هم کاملا دست شماست
کتابخانه هایی هستند که اینکارو راحت می کنند مثل whenever در روبی

2 پسندیده

سیستم‌عامل نمیتونه بفهمه کار درست انجام شده یا مثلا یه اروری از طرف سرور برگشته!

اینم نمیخوام. دوست دارم برنامم مثل یه سرویس همیشه روشن باشه و کارهای دیگه هم باهاش انجام بدم. (مثلا از طریق dBus باهاش ارتباط برقرار کنم)

سطح بالاتر از کلوژر نداریم که :joy:

هدفم یاد گرفتنه نه صرفا به جواب رسیدن. از طرف دیگه jvm اینطوریه که روشن کنی بذاری روشن بمونه به‌صرفه‌تره تا اینکه همش روشن و خاموشش کنی.


پس معمولا اینجور کارها رو در سطح نرم‌افزار انجام نمیدن؟

چندتا لایبرری کلوژر پیدا کردم، ولی میخواستم خودم پیاده کنم که بتونم با منطق خودم کنترلش کنم.

برای بازه ۲۴ ساعت نه. اما اگه بازه چند دقیقه باشه در برنامه هم میشه نوشتش

1 پسندیده

منظورم cron یا اون دستور watch در مقابل future و sleep‌و ایناست… به اون کاری نداره.

خب اون برنامه ای هم که همیشه ران باشه نباید اون برنامه‌ای که الان نوشتی باشه که قراره صرفا ۲۴ ساعت یکبار انجام بشه.

1 پسندیده