Schedule یا کرون جاب ها در NodeJs
زمان مطالعه: 4 دقیقه
۱۴۰۲/۹/۱۰

Schedule یا کرون جاب ها در NodeJs

نود جی اس یک پلتفرم عالی برای توسعه بک اند می باشد و اکثر برنامه هایی که توسعه داده میشوند یک نیاز مشترک دارند آن هم اجرای وظایفی می باشد که در یک تایم مشخص باید اجرا شوند، مانند پاک کردن دیتاهای قدیمی  یا ارسال تعداد زیادی ایمیل در ساعت خلوتی اپ و یا عملیات تسویه حساب مالی با کاربران سر یک ساعت مشخص و … از نمونه عملیات هایی میباشد که میتوان با jobs یا schedule انجام داد

در نود جی اس چندین روش برای پیاده سازی وظایف زمان بندی شده (Scheduling Tasks) وجود دارد : 

استفاده از setTimeout و setInterval :

این ۲ متد از ماژول های نیتیو و داخلی خود جاوا اسکریپت برای انجام وظایف زمان بندی شده میباشد.

متد setTimeout بعد از یک زمان مشخص برای یک بار اجرا میشود: 

const timeout = setTimeout(() => {
 // do something after one second
}, 1000);

کد های موجود در بدنه ی setTimeout بعد از تاخیر یک ثانیه ای اجرا میشود این متد ۲ پارامتر ورودی دارد 

اولین پارامتر یک تابع یا اصطلاحا callback function میباشد که این تابع میتواند در همان پارامتر ورودی تعریف شود یا می توان از یک تابعی که قبلا نوشته شده استفاده کنیم.

دومین پارامتر اختیاریست که میتواند یک مقدار را براساس میلی ثانیه باشد این پارامتر های ورودی برای متد setInterval هم صدق میکند.

مثال:

بررسی سینتکس و نحوه استفاده از setInterval و همچنین تمامی این دستورات و سینتکس ها در setTimeout هم صدق میکند.

setInterval(code)
setInterval(code, delay)

setInterval(func)
setInterval(func, delay)
setInterval(func, delay, arg1)
setInterval(func, delay, arg1, arg2)
setInterval(func, delay, arg1, arg2, /* …, */ argN); 

//پاس دادن پارامتر های یک تابع در setInterval
const intervalID = setInterval(myCallback, 500, "Parameter 1", "Parameter 2");

function myCallback(a, b) {
  // Your code here
  // Parameters are purely optional.
  console.log(a);
  console.log(b);
}

متد setInterval به طور مکرر یک تابع را با بازه زمانی یکسان اجرا میکند بطور مثال هر ۵ ثانیه یک بار یا هر یک  ساعت یکبار یک فانکشن را اجرا کند:

setInterval(() => {
 // do something every 5 second
}, 5000);

اما این ۲ متد مشکلات اساسی دارند و خیلی دقیق نمیباشند ممکن است بعد از چندین بار اجرا کردن یا متوقف شدن یکی از فرایند ها دیگر اجرا نشود یا تایمر آنها ممکن است همیشه دقیق نباشد بطور مثال اگر یک پردازش زمان اجرا شدنش از زمان تایمر بیشتر طول بکشد زمان آن ممکن است به هم بریزد 

پکیج node-schedule : 

ماژول node-schedule قابلیت های برنامه ریزی پیشرفته تری را ارائه می دهد. این به شما امکان می دهد کارها را با استفاده از سینتکس مخصوص cron برنامه ریزی کنید یا کارهای تکراری را در فواصل زمانی ثابت اجرا کنید.

برای استفاده از node-schedule می توانید آن را از طریق npm نصب کنید:

npm install node-schedule

مثال ۱:

میخواهیم یک جاب را در یک زمان مشخص برای یک بار اجرا کنیم :

const schedule = require('node-schedule');
const date = new Date(2024, 06, 01, 22, 30, 0); // 6th Jun 2024 at 22:30pm
const job = schedule.scheduleJob(date, function(){
 console.log('Hello Codenight!');
});

مثال ۲:

اجرای عملیات با سینتکس cron هر ۵ ثانیه  به طور مکرر:

const job = schedule.scheduleJob('*/5 * * * * *', function(){
 console.log('This job runs every 5 seconds');
});

مثال ۳:

اجرای عملیات با سینتکس cron هر ۲ دقیقه به طور مکرر:

job = schedule.scheduleJob('*/2 * * * *', function(){
 console.log('This job runs every 2 minutes');
});

حتی اگر برنامه ی Node.js ما دوباره راه اندازی شود، کارهای برنامه ریزی شده یا schedule های ما باقی خواهند ماند. node-schedule همچنین روش هایی را برای لغو کارها، فهرست کردن همه کارهای برنامه ریزی شده و ... ارائه می دهد.

سینتکس cron :

* * * * * *
┬ ┬ ┬ ┬ ┬ ┬ 
│ │ │ │ │ | 
│ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun) 
│ │ │ │ └───── month (1 - 12) 
│ │ │ └────────── day of month (1 - 31) 
│ │ └─────────────── hour (0 - 23) 
│ └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)

همانطور که مطالعه کردید schedule در توسعه و مدیریت فرآیند ها و اجرای وظایف در زمان های مشخص کاربرد بسیاری دارد و باعث میشود وظایف بطور اتوماتیک اجرا شوند همچنین این عملیات ها با اسم کرون جاب، اسکجوال (schedule) نیز شناخته میشود و کاربرد اصلی آن نیز اتوماتیک کردن عملیات هایی می باشد که نیاز به تکرار روزانه، ماهانه یا یک زمان مشخص دارند میباشد.

امیدوارم که این مقاله مفید واقع شده باشد و نظرات خود را در این مورد برای ما کامنت کنید.

پروفایل عرفان یوسفی

نویسنده مقاله

از سال ۸۹ - ۹۰ وارد حوزه ی برنامه نویسی شدم و انواع زمینه ها و شاخه های مختلف رو کار کردم تا اینکه سال ۹۵ توی حوزه ی بک اند (نود جی اس) ماندگار شدم، تجربیات خیلی زیادی رو توی این مسیر کسب کردم. شکست ها و موفقیت هایی رو هم داشتم که همه ی این موارد رو در قالب مقاله، دوره و پادکست در اختیارتون خواهم گذاشت خلاصه که وبسایت کدنایت رو سال ۱۴۰۲ توسعه دادیم که یک پلتفرم آموزشی با گروهی از اساتید خفن هستش که قراره کلی محتوا در اختیارتون بذاریم.

دیدگاه ها و پرسش ها