Skip to main content

Rejalashtirilgan agentlar (cron / scheduled)

Rejalashtirilgan agentlar

Eng kuchli AI-avtomatlashtirish — agent o'zi, hech kim chaqirmasa ham ishlaydigan agent. Har kuni ertalab hisobot, har soatda monitoring, haftalik tahlil. Bu qo'llanmada — vaqt bo'yicha ishga tushadigan (scheduled) AI-agentlarni qurish, xavfsiz va ishonchli qilish.

Nima uchun rejalashtirilgan agent?

Reaktiv agent — savol bo'lganda javob beradi. Proaktiv agent — o'zi vaqtida ish qiladi:

  • Ertalabki digest: tunda kelgan xabarlar/yangiliklar xulosasi
  • Monitoring: har 5 daqiqada xizmat holatini tekshirish
  • Haftalik hisobot: ma'lumotlarni yig'ib, tahlil generatsiya
  • Kontent: jadval bo'yicha post tayyorlash
  • Maintenance: backup, tozalash, indekslash

Cron vs systemd timer

Cron — oddiy

# crontab -e
# har kuni 07:00 da
0 7 * * * /usr/bin/python3 /home/app/morning_digest.py >> /var/log/digest.log 2>&1

# har 5 daqiqada
*/5 * * * * /home/app/monitor.sh

Format: daqiqa soat kun oy hafta-kuni.

systemd timer — ishonchli

Loglar (journalctl), avto-restart, dependency. Production uchun yaxshiroq.

/etc/systemd/system/digest.service:

[Unit]
Description=Ertalabki AI digest

[Service]
Type=oneshot
User=app
EnvironmentFile=/home/app/.env
ExecStart=/usr/bin/python3 /home/app/morning_digest.py

/etc/systemd/system/digest.timer:

[Unit]
Description=Digest har kuni 07:00

[Timer]
OnCalendar=*-*-* 07:00:00
Persistent=true

[Install]
WantedBy=timers.target
sudo systemctl enable --now digest.timer
systemctl list-timers # ko'rish
journalctl -u digest.service # loglar

Persistent=true — server o'chiq bo'lsa, yoqilganda o'tkazib yuborilgan ishni bajaradi.

Idempotentlik — eng muhim qoida

Agent ikki marta ishga tushsa (qayta urinish, overlap) — natija buzilmasligi kerak. Idempotent: bir necha marta bajarilsa ham bitta marta kabi natija.

def send_daily_digest(date):
# Allaqachon yuborilganmi?
if already_sent(date):
return "Bugun allaqachon yuborilgan"
digest = generate_digest(date)
send(digest)
mark_sent(date) # belgi qo'yamiz

Belgisiz: server qayta yoqilsa → digest 2 marta yuboriladi → foydalanuvchi bezovta.

Overlap'dan himoya (lock)

Oldingi ishga tushish tugamasdan keyingisi boshlansa — muammo. Lock fayl/flock bilan:

# flock — bir vaqtda faqat bitta nusxa
*/5 * * * * /usr/bin/flock -n /tmp/monitor.lock /home/app/monitor.sh

Python'da:

import fcntl

lock = open("/tmp/agent.lock", "w")
try:
fcntl.flock(lock, fcntl.LOCK_EX | fcntl.LOCK_NB)
except BlockingIOError:
print("Boshqa nusxa ishlayapti, chiqamiz")
exit(0)
# ... asosiy ish

Xatodan tiklanish

Rejalashtirilgan agent — odam qaramaydi. Xato bo'lsa, o'zi tiklanishi yoki xabar berishi kerak.

import logging

def run_with_recovery():
try:
result = do_work()
notify_success(result)
except RetryableError as e:
logging.warning(f"Qayta urinish: {e}")
retry_later() # navbatga
except Exception as e:
logging.error(f"Kritik xato: {e}")
alert_operator(e) # odamga xabar — Telegram/email

Qoida: jim xato eng yomoni. Agent ishlamay qolib, hech kim bilmasa — bir hafta ma'lumot yo'qoladi.

Heartbeat — "men tirikman" signali

Agent ishlayotganini tashqaridan bilish uchun — heartbeat. Har ishga tushganda "tirikman" deb belgi qoldiradi.

import time, json

def heartbeat():
with open("/home/app/heartbeat.json", "w") as f:
json.dump({"last_run": time.time(), "status": "ok"}, f)

Tashqi monitor (masalan UptimeRobot, yoki boshqa cron) heartbeat eskirganini ko'rsa — alert. "Agent 2 soat ishlamadi" → tekshirish.

Dead man's switch xizmatlari (healthchecks.io) — agent ping yubormasa, sizga xabar.

AI-qism: LLM chaqiruvi cron ichida

def morning_digest():
# 1. Ma'lumot yig'ish (idempotent — faqat o'qish)
messages = fetch_overnight_messages()
news = fetch_news()

# 2. LLM xulosa (arzon model — Haiku/Flash)
summary = llm.complete(
model="claude-haiku-4-5",
prompt=f"Quyidagilarni 5 bandda xulosa qil:\n{messages}\n{news}"
)

# 3. Yuborish (idempotent guard bilan)
if not already_sent(today()):
send_telegram(summary)
mark_sent(today())

Eslatma: cron'da LLM xarajatini nazorat qiling — har 5 daqiqali Opus chaqiruvi oyiga qimmatga tushadi. Arzon model + caching. Qarang: token tejash.

Real misol: monitoring agenti

Xizmatlar holatini tekshiradi, muammo bo'lsa — LLM kontekst bilan tahlil qilib, aniq alert yuboradi ("DB ulanish timeout, ehtimol connection pool to'lgan, qarang: ...").

Anti-paternlar

  • Idempotentlik yo'q: qayta urinish → dublikat. Har doim guard qo'ying
  • Jim xato: agent o'lib, hech kim bilmaydi. Alert majburiy
  • Lock'siz overlap: sekin ish — ikki nusxa bir-biriga xalaqit. flock
  • Cron'da qimmat model har daqiqa: oyiga katta hisob. Arzon model + interval kattaroq
  • Heartbeat'siz: tirikligini bilib bo'lmaydi. Dead man's switch qo'ying
  • Log'siz cron: >> log 2>&1 yo'q → xato qayerda — noma'lum

Keyingi qadamlar