0 0 1 * * İfadesi
0 0 1 * * cron ifadesi, hangi ay veya yıl olursa olsun, her ayın 1. gününde 0. dakika 0. saatte çalışır. Bu, işin 1 Ocak, 1 Şubat, 1 Mart vb. gece yarısı, yılda tam olarak 12 kez (her takvim ayında bir kez) çalışması anlamına gelir.
Alan ayrıştırması:
| Alan | Değer | Anlamı |
|---|---|---|
| Dakika | 0 | Saat başında |
| Saat | 0 | Gece yarısı |
| Ayın günü | 1 | Ayın 1. günü |
| Ay | * | Her ay |
| Haftanın günü | * | Herhangi bir gün |
@monthly Takma Adı
@monthly, 0 0 1 * * için kısayoldur ve çoğu cron hizmeti tarafından desteklenir:
@monthly /opt/jobs/billing-cycle
# şuna eşdeğer:
0 0 1 * * /opt/jobs/billing-cycle
Ayın Günü Değerleriyle Kenar Durumları
31 günden az olan aylar
29, 30 veya 31. günler için bir iş zamanlarsanız, bu günlere sahip olmayan aylarda sessizce atlanır:
| İfade | Atlanan aylar |
|---|---|
0 0 29 * * | Şubat (çoğu yıl) |
0 0 30 * * | Şubat |
0 0 31 * * | Şub, Nis, Haz, Eyl, Kas |
Artık yıl ve 29 Şubat
0 0 29 * *, artık olmayan yıllarda Şubat’ı tamamen atlar. Artık yıllarda 29 Şubat’ta çalışır.
Ayın Son Günü Sorunu
Cron’un ‘ayın son günü’ için yerleşik sözdizimi yoktur. Pratik geçici çözüm, işi günlük çalıştırmak ve betikte tarihi kontrol etmektir:
#!/bin/bash
# Yarın ayın 1'i değilse çık (yani bugün ayın son günü)
if [ "$(date -d tomorrow +%d)" != "01" ]; then
exit 0
fi
# gerçek iş mantığı
Gerçek Dünya Kullanım Alanları
Faturalama ve fatura kesme
Fatura oluşturma, abonelik yenilemeleri veya kullanım tabanlı ücretlerin yeniden hesaplanması tipik olarak fatura döngüsü sınırında, ayın 1’inde gerçekleşir.
Aylık raporlama
Finans, satış ve operasyonel raporlar genellikle önceki ayın verilerini toplar.
Veri arşivleme
Bir aydan eski verileri soğuk depolamaya taşımak, eski veritabanı kayıtlarını arşivlemek aylık cron için doğal kullanım alanlarıdır.