# استفاده از عبارات Cron در Quartz.NET

Cron چیست؟ قابلیتی است در سیستم عامل‌های مبتنی بر یونیکس که وظیفه اجرای وظایف در زمانبندی‌های خاص را بر عهده دارد، و به کاربران این امکان را می‌دهد که وظایف را زمانبندی کرده و در دوره‌های مشخص اجرا کن

- Published: 2013-06-29
- Language: fa
- Tags: DNTips
- Canonical: https://sirwan.info/blog/fa/dntips-1404

---

> این نوشته نخستین بار در [دات‌نت تیپس](https://www.dntips.ir/post/1404) منتشر شده است.

<div class="postBody">Cron چیست؟<br/>
قابلیتی است در سیستم عامل‌های مبتنی بر یونیکس که وظیفه اجرای وظایف در زمانبندی‌های خاص را بر عهده دارد، و به کاربران این امکان را می‌دهد که وظایف را زمانبندی کرده و در دوره‌های مشخص اجرا کنند.<br/><a href="https://en.wikipedia.org/wiki/Cron">اطلاعات بیشتر</a><br/><p>
در حقیقت رشته هایی هستند که از هفت قسمت تشکیل شده اند که هر قسمت مشخص کننده اعمال مربوط به زمانبندی می‌باشد مثلا انجام اعمالی :</p><ol><li>اجرای وظیفه ایی خاص هر روز ساعت 8 صبح</li><li>اجرای وظیفه ایی خاص هر جمعه آخر ماه</li><li>و...</li></ol><p>این هفت قسمت توسط فاصله از همدیگر جدا می‌شوند :</p><p><img src="/img/dntips/c9afc61ed6835f551b77.jpg" style="display:block; margin-left: auto; margin-right: auto;"/></p><p>عبارات cron خیلی قدرتمتد هستند و در عین حال مقداری پیچیده، هدف از ارائه این مطلب آشنایی با این نوع از عبارات و استفاده از آنها در Quartz.NET می‌باشد.</p><p>قبل از هر چیز ایتدا باید با فرمت این عبارات آشنا شویم :</p><img src="/img/dntips/623d23e68ffb51ff3d86.png" style="display: block; margin-left: auto; margin-right: auto; cursor: default;"/><br/>
پس عبارات cron در ساده‌ترین حالت می‌توانند به صورت :<br/><div align="left" dir="ltr">
<pre language="CSharp" name="code">* * * * ? *</pre>
</div>
و در حالت پیچیده‌تر می‌توانند به صورت زیر باشند :<br/><div align="left" dir="ltr">
<pre language="CSharp" name="code">0/5 14,18,3-39,52 * ? JAN,MAR,SEP MON-FRI 2002-2010</pre>
</div>
کارکترهای خاص :<br/><ul><li>* به معنی "تمام حالات" می‌باشد به عنوان مثال در فیلد "دقیقه" به معنی هر دقیقه می‌باشد.</li><li>؟ به معنی "نگذاشتن مقداری خاص" می‌باشد، به عنوان مثال می‌خواهیم کار ما در یک روز خاص از ماه اتفاق بیفتد اما مهم نیست چه روزی از هفته باشد.</li><li>- جهت تعیین یک رنج خاص (محدوده ایی خاص) به عنوان مثال "12-10" در فیلد ساعت به معنی "ساعت هایی 10، 11 و 12" می‌باشد.</li><li>, جهت تعیین مقادیر اضافی برای مثال  "MON,WED,FRI" در فیلد  day-of-week به معنای "روزه‌های دوشنبه، چهارشنبه و جمعه" می‌باشد.</li><li>/ جهت اعمالی increment(کاهشی) استفاده می‌شود به طور مثال "0/15" در فیلد seconds به معنای "ثانیه‌های 0 ، 15 ، 30 ، 45" می‌باشد، "5/15" نیز به معنای "ثانیه‌های 5 ، 20 ، 35 ، 50" می‌باشد، به صورت ساده‌تر به طور مثال اگر مقدار "0/15" را در فیلد "minutes" قرار دهیم به معنی "هر 15 دقیقه است و از دقیقه 0 آغاز میشود" با مثلا "3/20"به معنی "هر 20 دقیقه می‌باشد و از دقیقه سوم آغاز میشود".<br/></li><li>L "آخرین (Last)" همانطور که از شکل بالا مشخص است تنها در فیلدهایی Day of month و Day of week قابل استفاده می‌باشد به طور مثال اگر در فیلد Day of month استفاده شود به معنای "آخرین روز ماه" می‌باشد.</li><li>W "روز هفته(Weekday)" </li><li># جهت تعیین Xامین روز ماه به طور مثال مقدار "3#6" به "معنای سومین جمعه ماه" می‌باشد، در واقع مقدار 6 روز و مقدار 3# سومین در ماه می‌باشد.</li></ul><p>تعدای مثال :</p><p><img src="/img/dntips/ea679ffc5fdb593f7b0a.png" style="display: block; margin-left: auto; margin-right: auto; cursor: default;"/></p><p>تولید عبارات cron گاهی اوقات به نظر پیچیده می‌آید(به نظر من که اینطور نیست!) اما برای تولید آسان این عبارات می‌توانید از <a href="http://www.cronmaker.com/">این سرویس آنلاین </a> استفاده نمائید.</p><p>حال یک مثال در این رابطه :</p><p>می خواهیم یک کار را هر شب ساعت 11 شب برای انجام زمانبندی کنیم:</p><div align="left" dir="ltr">
<pre language="CSharp" name="code">public class HelloSchedule : ISchedule&#10;    {&#10;        public void Run()&#10;        {&#10;&#10;            IJobDetail job = JobBuilder.Create&lt;HelloJob&gt;()&#10;                                       .WithIdentity("job1")&#10;                                       .Build();&#10;&#10;            ITrigger trigger = TriggerBuilder.Create()&#10;                                             .ForJob(job)&#10;                                             .WithIdentity("trigger1")&#10;                                             .StartNow()&#10;                                             .WithCronSchedule("0 0 23 ? * MON-FRI *")&#10;                                             .Build();&#10;&#10;            ISchedulerFactory sf = new StdSchedulerFactory();&#10;            IScheduler sc = sf.GetScheduler();&#10;            sc.ScheduleJob(job, trigger);&#10;&#10;            sc.Start();&#10;        }</pre>
</div>
کدهای فوق دقیقا همانند مثالهایی هستند که پیشتر در سایت مشاهده کرده اید با این تفاوت به جای استفاده از متد WithSimpleScheduleاز متد WithCronSchedule استفاده می‌کنیم که پارامتر ورودی آن عبارت cron ما می‌باشد.<br/></div>
