# Gyro Kapsayıcı: zamanlanmış görev (cron)

https://www.gyrohosting.com/bilgi-bankasi/makale/gyro-kapsayici-zamanlanmis-gorev

- **Bu rehberde ne öğreneceksiniz**: Bir servis komutunu ya da bir adresi (HTTP çağrısı) takvime bağlamayı: her gece rapor, her 15 dakikada kuyruk temizliği ya da belirli bir anda tek sefer.
- **Süre**: 5 dakika
- **Kimin için**: Uygulamasını Gyro Kapsayıcı'da çalıştıran geliştiriciler.
- **Gerekenler**: Bir Gyro Kapsayıcı ortamı (servis komutu için en az bir servis).

## 1. Nasıl çalışır

- **Zamanlama** üç türlüdür: **cron ifadesi** (`dakika saat gün ay haftanın-günü`, ör. `0 3 * * *`; `@daily`, `@hourly` da olur), **her N dakikada** ya da **tek sefer** (tarih ve saat).
- Saatler seçtiğiniz **saat dilimine** göredir; varsayılan `Europe/Istanbul`. Yurt dışındaki kullanıcılarınız için ör. `UTC` ya da `Europe/Berlin` seçebilirsiniz.
- **Servis komutu** hedefinde her çalışma bir [tek seferlik görev](https://www.gyrohosting.com/bilgi-bankasi/makale/gyro-kapsayici-tek-seferlik-gorev) olarak başlar: servisin **o anda çalışan sürümünün imajı**, değişkenleri ve gizli değerleri kullanılır. Yeni sürüm dağıttığınızda sonraki çalışma yeni sürümle olur.
- **HTTP çağrısı** hedefinde ortamınızın içinden bir istek gönderilir (GET, POST, PUT, PATCH, DELETE, HEAD). Başlıklar ve gövde gizli saklanır, bir daha gösterilmez. Yanıt kodu 400 ve üstüyse çalışma başarısız sayılır; yönlendirme izlenmez. Kendi servisinizi iç adresiyle çağırabilirsiniz: `http://<servis>.<namespace>.svc.cluster.local`. Özel ağ ve platform adreslerine ulaşılamaz.
- **Üst üste binme yoktur:** bir zamanlamanın önceki çalışması sürerken yenisi başlamaz, geçmişte *Atlandı* olarak görünür.
- **Tekrar deneme:** başarısız çalışma 30 sn, 60 sn, 90 sn arayla en çok 3 kez yeniden denenir (siz seçersiniz, varsayılan 0).

## 2. Panelden eklemek

1. Hizmetinizde **Görevler** sekmesini açın, üstteki **Zamanlanmış** düğmesine basın.
2. **Zamanlama ekle**'ye basın, bir **ad** yazın (ör. `gece-raporu`).
3. **Ne zaman** alanında *Cron ifadesi*, *Her N dakikada* ya da *Tek sefer* seçin. Hazır düğmeler (`0 3 * * *`, `*/15 * * * *` …) işinizi kolaylaştırır; **Sonraki çalışmalar** satırı ifadeyi seçtiğiniz saat diliminde gösterir.
4. **Ne çalışsın** alanında *Servis komutu* (servis + komut + zaman sınırı) ya da *HTTP çağrısı* (yöntem + adres + başlıklar + gövde) seçin.
5. İsterseniz **Tekrar deneme** sayısını girin ve **Kaydet**'e basın.
6. Listede her zamanlamanın sonraki ve son çalışmasını görürsünüz. **Şimdi çalıştır**, **Geçmiş** (son 20 çalışma ve çıktıları), **Duraklat / Devam ettir**, **Düzenle** ve **Sil** düğmeleri satırın sonundadır.

## 3. CLI, API, Terraform ve yapay zeka asistanı ile

```
# her gece 03:00 (İstanbul), iki kez tekrar denemeli
gyro container schedule create 12345 gece-raporu --cron "0 3 * * *" --service api --retries 2 -- npm run report

# 15 dakikada bir kendi adresinizi çağırın
gyro container schedule create 12345 kuyruk --every 15m --url https://api.example.com/cron --method POST --header "Authorization: Bearer $TOKEN"

# 1 Aralık 09:00'da bir kez
gyro container schedule create 12345 kampanya --at 2026-12-01T09:00 --service api -- node send.js

gyro container schedule list 12345
gyro container schedule run-now 12345 gece-raporu
gyro container schedule pause 12345 gece-raporu
gyro container schedule preview 12345 --cron "0 9 * * 1-5" --timezone UTC
```

API: `POST /cloud/containers/{id}/schedules` gövdesi `{"name":"gece-raporu","cron":"0 3 * * *","service":"api","command":["npm","run","report"],"retries":2}`; liste `GET .../schedules`, ayrıntı ve geçmiş `GET .../schedules/{ad}`, değiştirme `PATCH`, silme `DELETE`, `POST .../pause|resume|run`, önizleme `POST .../schedules/preview`.

Terraform:

```
resource "gyro_container_schedule" "rapor" {
  environment_id = 12345
  name           = "gece-raporu"
  cron           = "0 3 * * *"
  timezone       = "Europe/Istanbul"
  service        = "api"
  command        = ["npm", "run", "report"]
  retries        = 2
}
```

Gyro MCP'de araçlar: `list_container_schedules`, `get_container_schedule`, `preview_container_schedule`, `create_container_schedule`, `update_container_schedule`, `pause_container_schedule`, `resume_container_schedule`, `run_container_schedule_now`, `delete_container_schedule`.

## 4. Bildirimler

- **schedule_failed:** çalışma, tekrar denemelerden sonra da başarısız olduysa.
- **schedule_missed:** çalışma planlanan saatte başlatılamadıysa (ör. platform bakımı); sonraki çalışma takvime göre yapılır.
- Bildirimler **Bildirimler** sekmesindeki kanallarınıza (e-posta, SMS, Telegram, imzalı webhook) gider. Sürekli başarısız olan sık bir zamanlama sizi boğmasın diye zamanlama başına tekrar aralığında (varsayılan 30 dakika) en çok bir mesaj gönderilir; hepsi geçmişte kayıtlıdır.

## 5. Sınırlar ve ücret

|  | Düğümlü paketler | Sunucusuz |
| --- | --- | --- |
| Ortam başına zamanlama | 2 vCPU'ya kadar paketlerde 5, diğerlerinde 10 | 5 |
| En kısa aralık | 1 dakika | 5 dakika |
| Ücret | Ek ücret yok (çalışma düğümlerinizde) | Her çalışma görev (task) gibi vCPU-saniye / GB-saniye |

- Zamanlanmış çalışmalar eşzamanlı görev sınırına sayılır ([tek seferlik görev](https://www.gyrohosting.com/bilgi-bankasi/makale/gyro-kapsayici-tek-seferlik-gorev)); sınır doluysa çalışma başarısız sayılır ve bildirim gelir.
- Sınırlar destek talebiyle artırılabilir (`gyro limits` sınırları gösterir).
- Ortam askıdayken hiçbir zamanlama çalışmaz; ortam silinince zamanlamalar da silinir.

## 6. Sık sorulanlar

**Saat dilimini değiştirirsem ne olur?** Sonraki çalışma yeni saat dilimine göre hemen yeniden hesaplanır.

**Aynı iş birden fazla kopyada mı çalışıyor?** Hayır. Servisinizin kaç kopyası olursa olsun zamanlama tek bir görev başlatır; önceki çalışma sürerken yenisi başlamaz.

**Çıktıyı nerede görürüm?** Zamanlamanın **Geçmiş** listesinden ya da Görevler > Tek seferlik listesinden; CLI'da `gyro container job logs 12345 <görev>`.

**Bir çalışmayı kaçırırsam telafi edilir mi?** Hayır. Kaçan çalışma *Kaçırıldı* olarak kaydedilir ve bildirim gelir; bir sonraki çalışma takvime göre yapılır. Duraklatıp devam ettirdiğinizde de sonraki çalışma o andan itibaren hesaplanır.

**Cron ifadesinde hem ayın günü hem haftanın günü varsa?** Klasik cron'daki gibi ikisinden biri tutunca çalışır (ör. `0 0 13 * 5` = ayın 13'ü ya da her cuma).
