پیامک، تلگرام یا بله؟ انتخاب کانال هشدار بدون خستگی از هشدار
کدوم هشدارهای قطعی با پیامک برن و کدوم با تلگرام یا بله، چطور بر اساس فوریت مسیریابی کنیم و چطور هشدارهای مهم زیر هشدارهای بیمورد گم نشن.
عبارت کرون پنج فیلد کوتاهه که «کی» رو توصیف میکنه. فشرده و قدرتمنده و خیلی راحت میشه یه اشتباه ظریف توش کرد؛ کاری که باید روزی یه بار اجرا بشه، با یه ستارهی جابهجا میتونه کل دقیقههای ساعت ۳ صبح اجرا بشه. این راهنما هر فیلد رو توضیح میده و زمانبندیهایی آمادهی کپی بهتون میده.
*، ,، - و / تقریباً هر زمانبندیای رو میسازن.* 3 * * * بین ۰۳:۰۰ تا ۰۳:۵۹ شصت بار اجرا میشه؛ احتمالاً منظورتون 0 3 * * * بوده.noc724 سایت، سرور و APIهای شما رو شبانهروز چک میکنه و همون لحظهای که چیزی خراب شد با پیامک، تلگرام یا بله خبرتون میکنه.
┌───────── دقیقه (0-59)
│ ┌─────── ساعت (0-23)
│ │ ┌───── روز ماه (1-31)
│ │ │ ┌─── ماه (1-12 یا JAN-DEC)
│ │ │ │ ┌─ روز هفته (0-7 یا SUN-SAT؛ صفر و هفت یعنی یکشنبه)
│ │ │ │ │
* * * * * commandکار وقتی اجرا میشه که زمان فعلی با همهی فیلدها جور باشه؛ با یه استثنا برای دو فیلد روز که پایینتر توضیح داده شده.
| کاراکتر | معنی | مثال | اجرا |
|---|---|---|---|
* | هر مقداری | * * * * * | هر دقیقه |
, | فهرست | 0 8,12,18 * * * | ساعت ۸، ۱۲ و ۱۸ |
- | بازه | 0 9-17 * * * | هر ساعت از ۹ تا ۱۷ |
/ | گام | */10 * * * * | هر ۱۰ دقیقه |
a-b/n | گام داخل بازه | 0 8-20/4 * * * | ۸، ۱۲، ۱۶ و ۲۰ |
گامها از شروع بازه شمرده میشن: */7 در فیلد دقیقه یعنی ۰، ۷، ۱۴ ... ۵۶ و دوباره ۰؛ نه «هر ۷ دقیقه» بهصورت پیوسته از مرز ساعت.
| عبارت | زمانبندی |
|---|---|
*/5 * * * * | هر ۵ دقیقه |
0 * * * * | هر ساعت، سر ساعت |
30 2 * * * | هر روز ساعت ۰۲:۳۰ |
0 9 * * 1-5 | دوشنبه تا جمعه ساعت ۹ |
0 0 * * 0 | هر یکشنبه نیمهشب |
0 6 1 * * | روز اول هر ماه ساعت ۶ |
0 0 1 1 * | سالی یه بار، اول ژانویه نیمهشب |
15 14 * * 6 | شنبهها ساعت ۱۴:۱۵ |
در ایران که هفتهی کاری معمولاً شنبه تا چهارشنبه است، «روزهای کاری ساعت ۹» میشه 0 9 * * 6,0-3.
میتونید عبارتها رو با ابزار ساخت عبارت Cron بسازید و چک کنید.
خیلی از نسخههای کرون میانبرهای اسمدار رو قبول میکنن:
| میانبر | معادل |
|---|---|
@hourly | 0 * * * * |
@daily / @midnight | 0 0 * * * |
@weekly | 0 0 * * 0 |
@monthly | 0 0 1 * * |
@yearly / @annually | 0 0 1 1 * |
@reboot | یه بار موقع شروع کرون |
* 3 * * * یعنی هر دقیقه در طول ساعت ۳. برای «یه بار ساعت ۰۳:۰۰» بنویسید 0 3 * * *.
اگه هم روز ماه و هم روز هفته تعیین شده باشن، کار وقتی اجرا میشه که یکی جور باشه. 0 9 13 * 5 هر سیزدهم ماه *و* هر جمعه اجرا میشه؛ نه فقط جمعهی سیزدهم. اگه هر دو رو لازم دارید، یکی رو محدود کنید و اون یکی رو داخل اسکریپت چک کنید.
0 0 31 2 * هیچوقت اجرا نمیشه؛ فوریه ۳۱ روز نداره. «روز آخر ماه» در کرون استاندارد قابل بیان نیست؛ روزهای ۲۸ تا ۳۱ اجرا کنید و بذارید اسکریپت چک کنه فردا روز اوله یا نه:
0 23 28-31 * * [ "$(date -d tomorrow +\%d)" = "01" ] && /opt/app/month-end.shکرون از ساعت محلی سرور پیروی میکنه. روی سرورهایی که ساعت تابستانی دارن، کاری که در ساعت حذفشده زمانبندی شده ممکنه اجرا نشه و کاری که در ساعت تکراری هست ممکنه دو بار اجرا بشه. تنظیم سرورها روی UTC هر دو مشکل رو حل میکنه؛ بعضی نسخههای کرون متغیر CRON_TZ رو هم پشتیبانی میکنن.
Quartz (جاوا)، Spring و بعضی زمانبندهای ابری از شش یا هفت فیلد استفاده میکنن که ثانیه اولشونه و گاهی ? به معنی «مقدار خاصی نه» دارن. عبارتی که بین سیستمها کپی بشه ممکنه بیصدا معنی دیگهای پیدا کنه.
کوچکترین واحد کرون استاندارد یه دقیقه است. دو خط بذارید که یکیشون قبل از دستور sleep 30 داره، یا از systemd timer استفاده کنید که ثانیه رو پشتیبانی میکنه.
نه. اگه سرور در زمان مقرر خاموش بوده، اون اجرا رد میشه. anacron و systemd timerها با Persistent=true میتونن کارهای جاافتاده رو بعد از روشن شدن اجرا کنن.
یکشنبه. هم صفر و هم هفت یعنی یکشنبه و یک یعنی دوشنبه.
نویسنده
تیم noc724
تیم فنی مانیتورینگ آپتایم
ما noc724 رو میسازیم و اداره میکنیم؛ سرویس مانیتورینگ آپتایمی که سایت، سرور و API رو از چند شهر ایران چک میکنه. این راهنماها از مشکلهایی میان که خودمون و کاربرهامون موقع آنلاین نگه داشتن سرویسها باهاشون روبهرو میشیم.
تماس با تیمتخصص:مانیتورینگ کرون
کدوم هشدارهای قطعی با پیامک برن و کدوم با تلگرام یا بله، چطور بر اساس فوریت مسیریابی کنیم و چطور هشدارهای مهم زیر هشدارهای بیمورد گم نشن.
چرا مانیتورهای آپتایم هشدار اشتباه میدن (اختلال شبکه، timeout، محدودیت نرخ، تغییر محتوا) و تنظیماتی که اینها رو حذف میکنه و هشدار واقعی رو سریع نگه میداره.
چطور یه چرخهی آنکال ساده و سیاست ارجاع هشدار بچینیم که هر هشدار حیاتی جواب داده بشه، بدون اینکه یه تیم کوچیک فرسوده بشه.