پیامک، تلگرام یا بله؟ انتخاب کانال هشدار بدون خستگی از هشدار
کدوم هشدارهای قطعی با پیامک برن و کدوم با تلگرام یا بله، چطور بر اساس فوریت مسیریابی کنیم و چطور هشدارهای مهم زیر هشدارهای بیمورد گم نشن.
وقتی یه کرون جاب درست کار نمیکنه، اولین سؤال همیشه اینه: «اصلاً اجرا شد؟». لاگهای خود کرون به این جواب میدن؛ خروجی کار شما به سؤال «و چه اتفاقی افتاد؟». این دو جای متفاوتی هستن و خیلی از سیستمها بهطور پیشفرض فقط یکیشون رو نگه میدارن.
/var/log/syslog یا journalctl -u cron بگردید؛ روی خانوادهی RHEL توی /var/log/cron یا journalctl -u crond.noc724 سایت، سرور و APIهای شما رو شبانهروز چک میکنه و همون لحظهای که چیزی خراب شد با پیامک، تلگرام یا بله خبرتون میکنه.
| سیستم | کجا رو نگاه کنیم |
|---|---|
| اوبونتو / دبیان | /var/log/syslog (خطهایی با برچسب CRON) یا journalctl -u cron |
| RHEL / Rocky / Alma / Fedora | /var/log/cron یا journalctl -u crond |
| Alpine (crond از busybox) | /var/log/messages وقتی syslog اجرا میشه |
| macOS | log show --predicate 'process == "cron"' --last 1h |
جستجوهای کاربردی:
grep CRON /var/log/syslog | tail -n 20
journalctl -u cron --since "1 hour ago"
journalctl -u crond --since today | grep backupیه خط معمولی اینشکلیه:
Oct 18 03:00:01 web1 CRON[48211]: (deploy) CMD (/opt/app/backup.sh >> /var/log/backup.log 2>&1)اگه این خط هست، کرون کار خودش رو کرده و مشکل داخل خود کاره. اگه نیست، زمانبندی، مالک crontab و اینکه اصلاً سرویس کرون اجرا میشه رو بررسی کنید: systemctl status cron (یا crond).
برای هر کاری که براتون مهمه، هر دو جریان خروجی رو redirect کنید:
0 3 * * * /opt/app/backup.sh >> /var/log/app/backup.log 2>&1>> بهجای بازنویسی در هر اجرا، به آخر فایل اضافه میکنه.2>&1 خطاها رو هم به همون فایل میفرسته؛ بیشتر خرابیها روی stderr هستن.لاگی پر از خروجی بدون تاریخ خوندنش سخته. یه wrapper کوچیک درستش میکنه:
#!/bin/bash
# /usr/local/bin/cronlog - run a command, prefix its output with timestamps
name="$1"; shift
{
echo "=== $(date '+%F %T') start $name"
"$@" 2>&1 | while IFS= read -r line; do echo "$(date '+%F %T') $line"; done
code=${PIPESTATUS[0]}
echo "=== $(date '+%F %T') end $name exit=$code"
} >> "/var/log/cron-jobs/$name.log"0 3 * * * /usr/local/bin/cronlog backup /opt/app/backup.shبرای لاگ کارهاتون یه قانون logrotate اضافه کنید:
/var/log/cron-jobs/*.log {
weekly
rotate 8
compress
missingok
notifempty
}اینها رو به ترتیب بررسی کنید:
timedatectl چک کنید.crontab -l برای کاربر، و /etc/cron.d/ و /etc/crontab برای کارهای سیستمی.env -i، یه PATH حداقلی و /bin/sh اجراش کنید.pgrep -af backup.sh؛ یه اجرای قبلی گیرکرده بهعلاوهی فایل قفل میتونه جلوی همهی اجراهای جدید رو بگیره.راهنمای ویرایش امن crontab مشکلهای محیطی پشت بیشتر این خرابیها رو توضیح میده.
لاگ برای بررسی بعد از رخداد عالیه و ساعت ۳ صبح، اگه کسی نخونه، بیفایده است. دو چیز اون رو به هشدار زودهنگام تبدیل میکنه:
نصبهای مینیمال و کانتینرها معمولاً سرویس syslog ندارن، پس کرون جایی برای نوشتن نداره. اگه systemd هست از journalctl استفاده کنید یا خروجی کارها رو خودتون به فایل بفرستید.
بعضی نسخهها پرچم سطح لاگ دارن (مثلاً cron -L 15 در کرون دبیان). معمولاً سادهتره که داخل خود کار لاگ بنویسید.
خروجیای که ذخیره نشده قابل بازیابی نیست. MAILTO رو روی یه آدرس سالم بذارید یا redirect اضافه کنید و منتظر اجرای بعدی بمونید.
نویسنده
تیم noc724
تیم فنی مانیتورینگ آپتایم
ما noc724 رو میسازیم و اداره میکنیم؛ سرویس مانیتورینگ آپتایمی که سایت، سرور و API رو از چند شهر ایران چک میکنه. این راهنماها از مشکلهایی میان که خودمون و کاربرهامون موقع آنلاین نگه داشتن سرویسها باهاشون روبهرو میشیم.
تماس با تیمتخصص:مانیتورینگ کرون
کدوم هشدارهای قطعی با پیامک برن و کدوم با تلگرام یا بله، چطور بر اساس فوریت مسیریابی کنیم و چطور هشدارهای مهم زیر هشدارهای بیمورد گم نشن.
چرا مانیتورهای آپتایم هشدار اشتباه میدن (اختلال شبکه، timeout، محدودیت نرخ، تغییر محتوا) و تنظیماتی که اینها رو حذف میکنه و هشدار واقعی رو سریع نگه میداره.
چطور یه چرخهی آنکال ساده و سیاست ارجاع هشدار بچینیم که هر هشدار حیاتی جواب داده بشه، بدون اینکه یه تیم کوچیک فرسوده بشه.