# Gyro Kapsayıcı: tek seferlik görev ve veritabanı migration

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

- **Bu rehberde ne öğreneceksiniz**: Veritabanı migration, seed ya da bakım betiği gibi bir komutu, servisinizin imajı, değişkenleri ve gizli değerleriyle **bir kez** çalıştırmayı; çıktısını canlı izlemeyi ve Gyro Pipeline'da her dağıtımdan önce kendiliğinden çalıştırmayı.
- **Süre**: 5 dakika
- **Kimin için**: Uygulamasını Gyro Kapsayıcı'da çalıştıran geliştiriciler.
- **Gerekenler**: Bir Gyro Kapsayıcı ortamı ve en az bir servis.

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

- Görev, seçtiğiniz servisin **çalışan sürümünün imajıyla** başlar. İmaj digest'e sabitlenir: `:latest` gibi bir etiket bu arada değişse bile tam olarak çalışan sürüm kullanılır.
- Servisin **değişkenleri ve gizli değerleri** aynen gelir; `DATABASE_URL` gibi bağlantı bilgisini ikinci kez girmeniz gerekmez.
- Komut imajın ENTRYPOINT'inin yerine geçer ve **liste** olarak gider. Kabuk özellikleri (`&&`, `>`, `|`) için `sh -c "…"` yazın. Komut boşsa imajın kendi komutu çalışır.
- Görevin portu ve sağlık kontrolü yoktur, bitince durur. **Başarısız görev tekrar denenmez** (migration iki kez çalışmasın diye).
- Varsayılan boyut servisinkiyle aynıdır; zaman sınırı 30 dakikadır (10 saniye ile 6 saat arası seçebilirsiniz). Süre dolunca görev durdurulur.
- Son 50 görev çıktısıyla birlikte saklanır (son 2.000 satır). Servisin gizli değerleri çıktıda `****` olarak görünür.

## 2. Panelden çalıştırmak

1. Hizmetinizde **Görevler** sekmesini açın, **Görev çalıştır**'a basın.
2. **Servis**'i seçin (imaj, değişkenler ve gizli değerler bu servisten alınır).
3. **Komut** yazın, örneğin `npm run migrate`, `php artisan migrate --force` ya da `python manage.py migrate`.
4. Gerekirse **zaman sınırı**, **vCPU** ve **bellek** değerlerini değiştirin, **Başlat**'a basın.
5. Görev listesinde durum *Başlatılıyor → Çalışıyor → Başarılı / Başarısız* olarak ilerler. **Çıktı** düğmesi logu canlı gösterir; çalışan görevi **Durdur** ile kesebilirsiniz.

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

```
# çıktıyı canlı izle; CLI görevin çıkış koduyla biter (124 = zaman sınırı doldu)
gyro container run 12345 --service api --follow -- npm run migrate

# kabuk özellikleriyle, 10 dakika sınırla
gyro container run 12345 --service web --wait --time-limit 10m -- sh -c "php artisan migrate --force && php artisan db:seed --force"

gyro container jobs 12345                       # son görevler
gyro container job logs 12345 jt0abc12def3      # bir görevin çıktısı
```

API: `POST /cloud/containers/{id}/services/{servis}/run` gövdesi `{"command": ["npm","run","migrate"], "timeout_seconds": 900}`; durum `GET /cloud/containers/{id}/jobs/{görev}`, çıktı `.../logs`, durdurma `DELETE /cloud/containers/{id}/jobs/{görev}`. Tekrar güvenliği için `Idempotency-Key` başlığı gönderin. Gyro MCP'de araçlar: `run_container_job`, `get_container_job`, `list_container_jobs`, `stop_container_job`.

## 4. Pipeline'da dağıtımdan önce

`gyro-pipeline.yml` dosyasına `release` ekleyin:

```
image: api
deploy:
  services: [api]
  release: ["npm", "run", "migrate"]   # yeni imajla, dağıtımdan önce
```

Derleme bitince görev **yeni imajla** ve ilk hedef servisin ayarlarıyla çalışır; çalıştırma bu sırada **Görev çalışıyor** (`releasing`) durumunda bekler. Onaylı dağıtımda görev onaydan sonra çalışır. Görev başarılıysa dağıtım başlar; **başarısız olursa hiçbir şey dağıtılmaz**, çalışan sürümünüz aynen kalır ve çalıştırma `release_failed` hatasıyla biter. Görevin çıktısı Görevler sekmesinde, çalıştırma numarasıyla birlikte görünür.

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

|  | Düğümlü paketler | Sunucusuz |
| --- | --- | --- |
| Aynı anda çalışan görev | 2 vCPU'ya kadar paketlerde 2, diğerlerinde 3 | 2 |
| Nerede çalışır | Kendi düğümlerinizde, servislerinizin yanındaki boş kapasitede | Paylaşımlı yalıtılmış havuzda |
| Ücret | Ek ücret yok | Görev (task) gibi vCPU-saniye / GB-saniye; faturada `<servis>-job` satırı |

- Boş kapasite yoksa görev reddedilir: görevin vCPU/belleğini küçültün, bir kopyayı durdurun ya da paketi büyütün.
- Eşzamanlı görev sınırı destek talebiyle artırılabilir (`gyro limits` sınırı gösterir).
- Başarısız ya da süresi dolan görev **job_failed** bildirimini gönderir (Uyarılar sekmesindeki e-posta, SMS, Telegram, webhook kanallarınız).

## 6. Sık sorulanlar

**Migration iki kez çalışır mı?** Hayır. Görev başarısız olsa bile kendiliğinden tekrar denenmez. Tekrar çalıştırmak sizin kararınızdır.

**Hangi imaj kullanılıyor?** Elle başlatılan görevde servisin şu an çalışan sürümü (digest). Servisin çalışan kopyası yoksa ayarlı etiket kullanılır, panel bunu "etiketle" diye gösterir. Pipeline'da yeni derlenen imaj kullanılır.

**Komutta `<`, `>`, `&&` kullanabilir miyim?** Evet. Komut olduğu gibi iletilir; yönlendirme ve zincirleme için `sh -c "…"` yazın.

**Görev servisimi etkiler mi?** Servisiniz çalışmaya devam eder. Görev ayrı bir kapsayıcıdır; yalnız aynı kapasiteyi paylaşır.

**Zamanlanmış görev (cron) var mı?** Henüz yok; tek seferlik görevi kendi zamanlayıcınızdan CLI ya da API ile başlatabilirsiniz.
