Rejalashtirilgan agentlar (cron / scheduled)

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>&1yo'q → xato qayerda — noma'lum
Keyingi qadamlar
- AI-agentni VPS-ga deploy qilish — 24/7 server
- n8n + AI — vizual avtomatlashtirish muqobili
- Token va xarajatlarni kamaytirish — cron LLM narxi