Bu crontab cheatsheet, standart Linux kullanıcı crontab'ı için alanları, özel karakterleri ve sık kullanılan zamanlamaları bir araya getirir. Bir ifadenin yalnızca doğru görünmesi yeterli değildir: yanlış alandaki yıldız, işi günde bir kez yerine her dakika başlatabilir. Tabloları kullanırken hangi alanın sabit, hangisinin serbest olduğunu okuyun.
Aşağıdaki örnekler beş zaman alanını izleyen bir kabuk komutu içindir. HTTP zamanlayıcıya yalnızca ifadeyi girerken komut bölümünü eklemeyin. Quartz veya Spring ifadesini Linux'a doğrudan taşımayın; saniye ve yıl alanları farklıdır. Temeli ayrıntılı öğrenmek isterseniz crontab sözdizimi rehberini, senaryo çeşitleri için cron ifadeleri açıklamalarını kullanabilirsiniz.
Crontab anatomisi: beş alanlı zaman formatı
# dakika saat ayın_günü ay haftanın_günü komut
# 0-59 0-23 1-31 1-12 0-7
0 9 * * 1-5 /bin/sh /srv/app/report.sh
Örnekte dakika sıfır, saat dokuz ve haftanın günü pazartesi ile cuma arasındadır. Ayın günü ve ay alanlarındaki yıldız, o alanın bütün geçerli değerlerini kabul eder. Komut pazartesiden cumaya 09:00'da başlar. Zamanlama cron'un kullandığı saat dilimine göre değerlendirilir; işin ne zaman biteceğini veya önceki örneğin tamamlandığını garanti etmez.
| Alan | Değer | Okuma ipucu |
|---|---|---|
| Dakika | 0–59 | 0 saat başıdır; 60 geçersizdir. |
| Saat | 0–23 | Gece yarısı 0, öğlen 12 olur. |
| Ayın günü | 1–31 | Her ayda bütün günler bulunmaz. |
| Ay | 1–12 veya JAN–DEC | İngilizce üç harfli adlar kullanılır. |
| Haftanın günü | 0–7 veya SUN–SAT | Cronie/Vixie ailesinde 0 ve 7 pazardır. |
Kullanıcı crontab'ında beş alandan sonra komut gelir. /etc/crontab ve /etc/cron.d/ biçiminde araya kullanıcı adı eklenir; bu ek sütun saniye alanı değildir. Spring altı alan kullanır ve ilk alan saniyedir. Quartz altı zorunlu zaman alanına isteğe bağlı yıl ekleyebilir. Bu nedenle alan sayısını ve kullanılan zamanlayıcının belgesini kontrol ederek başlayın.
Özel karakterler: yıldız, liste, aralık ve adım
| Karakter | Anlamı | Örnek |
|---|---|---|
* | Alanın bütün değerleri | Dakikada * her dakika demektir. |
, | Değer listesi | 0,30 iki ayrı dakikayı seçer. |
- | İki uç dahil aralık | 9-17 saatleri 09 ile 17 arasındadır. |
/ | Alan içinde adım | */15 dakikada 0,15,30,45 olur. |
Adım değeri son çalışmadan itibaren geçen süreyi ölçmez. Örneğin */40 * * * * her saatin sıfırıncı ve kırkıncı dakikasını seçer; aralıklar sırayla kırk ve yirmi dakikadır. Kesintisiz kırk dakikalık süre sayacı değildir. Benzer şekilde saat alanında */5, günün 0, 5, 10, 15 ve 20 saatlerini seçer; ertesi gece yarısına son aralık dört saattir.
Ayın günü ve haftanın günü birlikte kısıtlanırsa Cronie/Vixie davranışında iki koşuldan birinin eşleşmesi yeterlidir. 0 9 1 * 1 yalnızca pazartesiye denk gelen ayın ilk gününü seçmez; ayın ilk günü ve her pazartesi çalışır. Kesişim gerekiyorsa açık bir script koşulu ekleyin. Ürünler arasında bu kuralı varsaymak yerine kendi zamanlayıcınızın davranışını doğrulayın.
En çok kullanılan 25 cron ifadesi
Dakikalık, saatlik, günlük ve aylık kalıplar
Tablodaki saatler cron'un geçerli saat dilimine göredir. Bunlar işin başlangıç anlarını tarif eder; çalışma süresini sınırlamaz. İlk denemede üretim verisini değiştirmeyen bir komutla zamanı doğrulayın. Uzun işler için eşzamanlı çalışmayı önleyen uygulama kilidi düşünün; beş dakikada bir tanımlamak, altı dakika süren bir işi kendiliğinden sıraya koymaz.
| İfade | Ne zaman çalışır? |
|---|---|
* * * * * | Her dakika. |
*/2 * * * * | Her saatin çift dakikalarında. |
*/5 * * * * | 0, 5, 10 ve devam eden beşli dakikalarda. |
*/10 * * * * | 0, 10, 20, 30, 40 ve 50. dakikalarda. |
*/15 * * * * | Saatte dört kez, çeyrek saatlerde. |
*/30 * * * * | Her saatin 0 ve 30. dakikalarında. |
0 * * * * | Her saat başında. |
15 * * * * | Her saatin 15. dakikasında. |
0 */2 * * * | 00:00'dan başlayarak iki saatte bir. |
0 */4 * * * | 00:00, 04:00, 08:00, 12:00, 16:00, 20:00. |
0 */6 * * * | 00:00, 06:00, 12:00 ve 18:00. |
0 */12 * * * | Gece yarısı ve öğlen. |
0 0 * * * | Her gün gece yarısı. |
0 3 * * * | Her gün 03:00. |
30 8 * * * | Her gün 08:30. |
0 9 * * 1-5 | Hafta içi 09:00. |
0 18 * * 1-5 | Hafta içi 18:00. |
0 9 * * 6,0 | Cumartesi ve pazar 09:00. |
0 0 * * 0 | Her pazar gece yarısı. |
0 10 * * 1 | Her pazartesi 10:00. |
0 0 1 * * | Her ayın ilk günü gece yarısı. |
0 9 15 * * | Her ayın 15. günü 09:00. |
0 0 1 */3 * | Ocak, nisan, temmuz, ekim aylarının ilk günü. |
0 0 1 1 * | Her yıl 1 Ocak gece yarısı. |
0 9 * * 1,3,5 | Pazartesi, çarşamba ve cuma 09:00. |
Hazır cron makroları
Makro, beş zaman alanının yerine yazılır; ardından yine komut gelir. Aşağıdaki karşılıklar Cronie/Vixie ailesindeki yaygın davranışı gösterir. Destek uygulamaya göre değişebilir. Özellikle @reboot ağın, veritabanının veya bağlı disklerin hazır olduğunu garanti etmez; bağımlılığı olan servisler için hizmet yöneticisi daha uygun olabilir.
| Makro | Karşılığı veya davranışı |
|---|---|
@reboot | Cron daemon başlangıcında bir kez; uygulamanızın yerel belgesini kontrol edin. |
@yearly | 0 0 1 1 * |
@annually | @yearly ile aynı. |
@monthly | 0 0 1 * * |
@weekly | 0 0 * * 0 |
@daily | 0 0 * * * |
@hourly | 0 * * * * |
Cronie ayrıca @midnight adını @daily eşanlamlısı olarak belgeler; bu nedenle bütün uygulamalar için kesin bir makro sayısı vermek doğru değildir. HTTP hizmetinde desteklenen makrolar ayrıca belirtilir. Linux'ta bir ifadenin çalışması, başka ürünün aynı takma adı kabul edeceğini kanıtlamaz.
Adım adım kullanım ve gerçek görev örnekleri
- Görevin çalışacağı kullanıcıyı belirleyin ve crontab -l ile mevcut tabloyu okuyun. Değişiklik öncesi tam yedek alın.
- Çalıştırılacak scriptleri mutlak yollarla hazırlayın. Aynı kullanıcıyla terminalde deneyin; gerekli çalışma dizini ve ortam değişkenlerini script içinde tanımlayın.
- crontab -e ile aşağıdaki ihtiyacınıza uygun satırı ekleyin. Script adları örnektir; sunucunuzda gerçekten var olan dosyaları kullanın.
- Kaydettikten sonra crontab -l ile sonucu doğrulayın. İlk beklenen zamanda logu inceleyin; yalnızca kaydın görünmesini başarı saymayın.
# Örnek scriptler önceden hazırlanmalı; log dizini yazılabilir olmalı.
*/5 * * * * /bin/sh /srv/app/sync.sh >> /srv/app/logs/sync.log 2>&1
0 9 * * 1-5 /bin/sh /srv/app/report.sh >> /srv/app/logs/report.log 2>&1
0 0 1 * * /bin/sh /srv/app/month-close.sh >> /srv/app/logs/month-close.log 2>&1
İlk senaryoda stok eşitleme scripti beş dakikalık aralıklarla değişiklikleri toplar. Tekrar çalıştırma aynı kaydı çoğaltmamalıdır; önceki çalışma sürüyorsa kilit kullanın. İkinci senaryoda hafta içi 09:00 raporu iş günü başlangıcına bağlanır. Bu ifade resmî tatilleri ayırt etmez; tatil denetimi gerekiyorsa uygulama takvimine ekleyin.
Üçüncü satır ayın ilk günü gece yarısı kapanış işini başlatır. Her otuz günde bir çalışmakla aynı değildir; aylar farklı uzunluktadır. Ayın 31. gününü seçerseniz o günün bulunmadığı aylarda iş çalışmaz. Dönem hesabını uygulamada yapmak, zamanlamayı bütün iş kurallarının yerine kullanmaktan daha güvenilirdir.
Yüzde işareti ve diğer sözdizimi tuzakları
Crontab komut bölümünde kaçırılmamış %, yeni satır olarak yorumlanır; ilk yüzde işaretinden sonraki veri komutun standart girdisine gönderilir. Kabuk tırnakları tek başına koruma sağlamaz. Tarih damgalı log dosyası oluştururken her yüzde işaretinin önüne ters eğik çizgi ekleyin. Ayrı bir script dosyasının içindeki date komutunda ise bu cron kaçışı gerekmez.
# Doğrudan kullanıcı crontab'ına yazılan doğru satır:
0 3 * * * /bin/sh /srv/app/backup.sh >> /srv/app/logs/backup-$(date +\%Y-\%m-\%d).log 2>&1
Crontab'ı başka bir JSON veya programlama dili dizgesinden üretiyorsanız o katmanın ters eğik çizgi kaçışını ayrıca uygulayın; son kayıtta tek ters eğik çizgi görünmelidir. Yorumları ayrı satıra yazın. Aynı satırın sonuna eklediğiniz # açıklaması cron tarafından ayrı bir yorum olarak ayrılmaz; komutun parçası olur.
?, standart Linux crontab alanlarında yıldızın eşdeğeri değildir. Quartz ve bazı bulut zamanlayıcılarında özel anlam taşır. Yaz saati uygulayan bölgelerde atlanan veya tekrarlanan yerel saatler de zamanlamayı etkileyebilir. Dağıtımın cron davranışını ve saat dilimini kontrol edin; kritik işlemlerde dönem bazlı tekrar koruması sağlayın.
Crontab CLI kısayolları ve güvenli değişiklik
| Komut | İşlev |
|---|---|
crontab -l | Kullanıcı tablosunu listeler. |
crontab -e | Kullanıcı tablosunu düzenler. |
sudo crontab -u www-data -l | Yetkiyle başka kullanıcıyı listeler. |
crontab yedek.txt | Tablonun tamamını dosyadan değiştirir. |
crontab -r | Bütün kullanıcı tablosunu kaldırır; dikkatle kullanılmalıdır. |
Listeleme ile silme seçeneklerini karıştırmayın. Destekleyen uygulamalarda -i silmeden önce onay ister; yedeğin yerini tutmaz. Dosyadan yükleme mevcut satırlara ekleme yapmaz. Güvenli dışa aktarma ve geri yükleme ayrıntıları crontab -l rehberindedir. Sözdizimi denetimi için kullanılabilecek seçenekler uygulamaya göre değişir; internetteki her bayrağı yerel komuta taşımayın.
Sık karşılaşılan hatalar ve çözümleri
bad minute
İlk alanın değeri veya biçimi geçersizdir. Dakika aralığının 0–59 olduğunu kontrol edin; 60 yazmayın. Quartz ifadesinden taşınmış saniye sütunu varsa yalnızca sayıyı düzeltmek yerine bütün alan sırasını yeniden kurun.
İş saat başı yerine her dakika çalışıyor
* * * * * bütün dakikaları seçer. Saat başı için ilk alanı sıfıra sabitleyerek 0 * * * * kullanın. Günlük görevde hem dakika hem saat sabit olmalıdır.
date komutu terminalde çalışıyor, cron'da bozuluyor
Kaçırılmamış yüzde işareti komutu bölüyor olabilir. Doğrudan crontab satırındaki tarih biçiminde \% kullanın veya komutu ayrı bir script dosyasına taşıyın. Hata çıktısını logda saklayarak yeniden deneyin.
Altı alanlı ifade kaydoldu ama görev çalışmıyor
Linux kullanıcı crontab'ı fazladan sayıyı komutun başlangıcı sayabilir; her zaman kurulum hatası vermez. Sonuçta sayı adlı bir komut bulunamayabilir. Beş zaman alanından sonra doğrudan gerçek komutun geldiğini doğrulayın.
Permission denied veya command not found
İfade doğru olsa da kullanıcı yetkisi ve cron ortamı farklı olabilir. Script ile çıktı dizininin izinlerini kontrol edin, yorumlayıcıyı mutlak yoluyla çağırın ve çalışma dizinini scriptte açıkça ayarlayın. Terminal PATH değerine güvenmeyin.
Alanlar, adımlar, yüzde kaçışı ve gün eşleştirme ayrıntıları crontab biçim kılavuzunda yer alır. Spring ve Quartz için kendi sözdizimlerini kullanın: Spring zamanlama belgesi ve Quartz CronTrigger belgesi alan ayrımlarını açıklar.
cronjob.com.tr ile HTTP tabanlı alternatif
Bir iş URL üzerinden tetiklenebiliyorsa yerel komut yerine HTTP görevi oluşturabilirsiniz. Cron ifade oluşturucuyla zamanlamayı hazırlayın; panelde beş alanlı ifadeyi veya hazır aralığı seçin. cronjob.com.tr en kısa bir dakika aralığı destekler; saniyelik Quartz ifadesi bu alana taşınmaz. İş bazında saat dilimi seçilir; varsayılan Europe/Istanbul'dur.
- Örneğin https://example.com/api/reports/daily uç noktasını POST ve gizli X-Maintenance-Token header doğrulamasıyla koruyun. Bu, sizin uygulamanızda geliştirilecek bir adrestir.
- Panelde HTTPS URL, POST metodu, header değeri ve 0 9 * * 1-5 zamanlamasını girin. Gizli değeri URL sorgusuna koymayın.
- Manuel çalıştırmayla HTTP yanıtını ve uygulamadaki sonucu doğrulayın. Aynı işin yerel crontab'da da etkin kalıp çift çalışmasını önleyin.
Cron ifadeli işlerde bekleme sınırı 290 saniye, bir dakikalık hazır aralıkta 55 saniyedir. Bağlantı hatası yokken HTTP 200–399 başarı sayılır. Varsayılan üç ardışık hata eşiğinde erişim sorunu, düzelince düzelme e-postası gönderilir; aynı işin bildirimleri arasında en az altmış dakika vardır. HTTP görevi, sunucudaki kabuk komutunu doğrudan çalıştırmaz.
Sıkça Sorulan Sorular (SSS)
Crontab'da pazar günü hangi sayıdır?
Cronie/Vixie ailesindeki Linux crontab'ında 0 ve 7 pazar gününü belirtir. Başka bir zamanlayıcıya taşırken gün numaralarını kendi belgesinden doğrulayın.
@reboot tam olarak ne zaman çalışır?
Cronie'de cron daemon başlangıcında bir kez çalışır. Uygulamanın dağıtımınızdaki davranışını kontrol edin; diğer servislerin hazır olduğunu garanti etmez.
Her on dakikada bir çalışmak için hangi ifade kullanılır?
*/10 * * * * ifadesi her saatin 0, 10, 20, 30, 40 ve 50. dakikalarını seçer; son çalışmadan itibaren süre tutmaz.
Yıldız ile soru işareti Linux crontab'da aynı mıdır?
Hayır. Yıldız alanın bütün geçerli değerlerini seçer; soru işareti standart Linux crontab zaman alanlarında desteklenmez.
HTTP görevinizi oluşturun
cronjob.com.tr ücretsizdir; kayıtta kredi kartı istenmez. Uygulamanızın HTTP işini seçtiğiniz zamanlamayla tetikleyin.
Ücretsiz Başla →