İçeriğe geç
ivralo
Bölümler

Dokümantasyon / İşletim

Zamanlanmış istekler

Zamanlama, bir isteği işletim sisteminin kendi zamanlayıcısıyla, vakti gelince kendiliğinden çalıştırır. Sonucu yalnızca zamanlamayı kurarken onayladığınız kişilere gönderebilir.

Zamanlama nasıl çalışır

ivralo zamanlamalar için bir daemon çalıştırmaz. ivralo schedule add, işletim sisteminin zamanlayıcısına bir görev kaydeder; bu görev de belirlediğiniz saatte ivralo schedule run <name> komutunu çağırır. Bu çalıştırma, ivralo ask'ın pipe içinde yaptığı gibi başında kimsenin olmadığı bir çalıştırmadır: onay gerektiren hiçbir şeye izin verilmez.

PlatformZamanlayıcıGörev nerede
Linux, macOScroncrontab'ınızda # ivralo:<name> etiketli tek bir satır
WindowsTask Schedulerschtasks ile oluşturulan ivralo\<name> görevi

macOS'ta da görev bir cron satırıdır; ivralo launchd job'u yazmaz. crontab'ınızın geri kalanına dokunulmaz.

Zamanlama eklemek

ivralo schedule add sales-report --every "weekly mon 09:00" \
  --mail-to ali@example.com \
  "produce the weekly sales report from sales.xlsx and e-mail it to ali@example.com"

Ad küçük harf, rakam ve tirelerden oluşur. Aynı adda bir zamanlama zaten varsa, ancak onay verirseniz ya da --yes kullanırsanız değiştirilir.

--every bilerek küçük tutulmuş bir söz dizimi kullanır. Daha karmaşık her zamanlama işletim sisteminin zamanlayıcısına kalır; orada elle kaydettiğiniz bir görev de ivralo schedule run <name> çağırabilir.

--everyNe zaman çalışır
daily HH:MMHer gün o saatte
weekdays HH:MMPazartesiden cumaya
weekly <mon..sun> HH:MMHaftada bir; mon 09:00 da olur
monthly <1-31> HH:MMAyda bir, o gün
hourlySaatte bir; en sık seçenek bu

Saatini beklemeden denemek

ivralo schedule run sales-report

run, görevin yapacağı işin tıpatıp aynısını yapar ve pipeline'ın bastığı JSON nesnesini ekrana basar (ok, reply, files, run_id, seconds, ...). Çalıştırma başarısız olursa 1 ile çıkar. Her çalıştırma bu nesneyi ayrıca workspace'te .ivralo/schedules/<name>/ altına tek bir dosya olarak bırakır.

Zamanlama neyi gönderebilir

Başında kimsenin olmadığı bir çalıştırma gönderim onayına cevap veremez. Bu yüzden böyle bir çalıştırmanın e-posta göndermesinin tek yolu --mail-to'dur ve onay bir kez, zamanlamayı oluştururken verilir:

  • alıcılar o anda IVRALO_MAIL_ALLOWED ile karşılaştırılır ve e-postanın ayarlı olması gerekir (IVRALO_MAIL); aksi halde add reddeder;
  • çalışma anında yalnızca bu adreslere gönderim yapılır; modelin uydurduğu adresler de dahil, başka her adres reddedilir;
  • --mail-to verilmemiş bir zamanlama hiç e-posta gönderemez.

--notify kısa mesajlar için aynı işi görür: zamanlama, ayarlı Telegram sohbetine ya da Slack webhook'una yazabilir. Sohbet ayarlarda sabit olduğu için bayrağı vermek onay yerine geçer. Bu ön onayların hiçbiri etkileşimli bir oturuma, düz bir ivralo ask'a ya da bir job'a geçmez; onlar her seferinde sormaya devam eder. Ayrıntılar için E-posta ve sohbet.

Job'ları akıtmak: --jobs

--jobs ile oluşturulan bir zamanlama istek almaz. Görev, zamanlamayı kurduğunuz workspace için ivralo jobs run çalıştırır. Böylece her seferinde kuyruktaki sıradaki job başlar, sonuna kadar çalışır ve görev çıkar:

ivralo schedule add jobs --every hourly --jobs

Görev o workspace'e sabitlenir (IVRALO_WORKSPACE); hangi dizinden çalışırsa çalışsın o workspace'in job'larını başlatır. --mail-to ya da --notify almaz: başlattığı job'lar başında kimse olmadan çalışır ve içlerinden birinde bir gönderim olursa job onay beklemek için park eder. JSON çalıştırma log'u yazılmaz; her çalıştırmanın çıktısı task.log içindedir.

Komutlar

KomutNe yapar
ivralo schedule (ya da schedule list)Bütün zamanlamalar: ne zaman çalıştığı, kime e-posta atabileceği, görevin işletim sisteminde hâlâ kayıtlı olup olmadığı, son çalıştırma
ivralo schedule add <name> --every "<when>" "<request>"İşletim sistemine kaydeder ve ivralo tarafında saklar
ivralo schedule run <name>Hemen, başında kimse olmadan çalıştırır; görevin çağırdığı komut da budur
ivralo schedule log <name>Son çalıştırmalar: ne zaman, başarılı mı başarısız mı, kaç saniye, hangi dosyalar, cevabın ilk satırı (--limit, varsayılan 10)
ivralo schedule remove <name>Görevin kaydını siler ve zamanlamayı kaldırır; log'lar kalır. Önce onay ister, ya da --yes.

Neler nerede

  • ivralo ana dizinindeki schedules.json bütün zamanlamaları tutar (IVRALO_SCHEDULES ile yerini değiştirebilirsiniz).
  • Workspace'teki .ivralo/schedules/<name>/ klasöründe her çalıştırma için bir JSON dosyası ve komutun bastığı her şeyi içeren task.log bulunur. Bir çalıştırma hiçbir şey yapmamışsa ilk bakmanız gereken yer burası.
  • Görev, kurulumun kendi ivralo'sunu mutlak yoluyla çağırır, çünkü cron'un PATH'i çok kısıtlıdır; ayrıca ana dizinden başlar. ivralo çalıştırılabilir dosyası bulunamazsa schedule add hiçbir şey kaydetmeden reddeder.

ivralo doctor'da bir schedules bölümü vardır: her zamanlamayı, görevin işletim sisteminde hâlâ kayıtlı olup olmadığını ve son çalıştırmanın nasıl geçtiğini gösterir.

Neler ters gidebilir

  • Zamanlanan saatte model ayakta değil. Çalıştırma log'a başarısız olarak düşer, nedenini ivralo doctor söyler. Model sunucusunun makineyle birlikte açıldığından emin olun.
  • Kurulumun yeri değişti. Görevin komut satırı mutlak yol içerir. ivralo'yu başka bir yere kurduktan sonra ivralo schedule add ... --yes komutunu yeniden çalıştırın.
  • Çalıştırma hiçbir şey yapmadı. .ivralo/schedules/<name>/ altındaki task.log'a bakın. Başlamış bir çalıştırmanın JSON dosyasında bir run_id olur; ivralo trace <run_id> yaptığı bütün çağrıları gösterir.