Cron, Unix ve Linux işletim sistemlerine yerleşik zamanlamaya dayalı bir iş zamanlayıcısıdır. Herhangi bir manuel müdahale olmaksızın komutların veya betiklerin sabit zamanlarda, tarihlerde ya da aralıklarda otomatik olarak çalışmasını sağlar. İsim, Yunanca chronos (zaman) kelimesinden gelmektedir. Cron; yedekleme, log rotasyonu, rapor oluşturma ve e-posta gönderme gibi tekrarlayan sistem görevlerini otomatikleştirmek için standart araçtır.
Bir cron ifadesi oluşturmanız veya doğrulamanız mı gerekiyor?
Cron Builder'ı Aç →Orijinal cron, 1979 yılında Bell Labs'ta Ken Thompson tarafından Version 7 Unix'in bir parçası olarak yazıldı. Her dakika uyanan, bir iş tablosunu kontrol eden ve zamanlanmış olanları çalıştıran basit bir daemon'du. Paul Vixie tarafından 1987–1988 yıllarında yazılan Vixie Cron, çoğu Unix sisteminde standart uygulama olarak yerini aldı ve bugün hâlâ kullanılan tanıdık beş alanlı sözdizimini tanıttı. Vixie Cron (veya türevleri), çoğu Linux dağıtımında varsayılan cron'dur. Modern varyantlar arasında Anacron (sürekli çalışmayan sistemler için), Fcron ve systemd tabanlı sistemlerde alternatif olarak systemd zamanlayıcıları bulunmaktadır.
Cron daemon'u (crond) arka planda sürekli çalışır. Her dakika crontab dosyalarını okur (kullanıcı başına bir tane, artı /etc/cron.d/ içindeki sistem genelindeki crontab'lar) ve zamanlanmış zamanı mevcut zamanla eşleşen tüm işleri çalıştırır. Her kullanıcı kendi crontab'ını crontab komutuyla yönetir.
/dev/null'a veya bir log dosyasına yönlendirin)Bir cron ifadesi, çalıştırılacak komutun önünde beş boşlukla ayrılmış alandan oluşur:
┌───────────── dakika (0–59)
│ ┌───────────── saat (0–23)
│ │ ┌───────────── ayın günü (1–31)
│ │ │ ┌───────────── ay (1–12)
│ │ │ │ ┌───────────── haftanın günü (0–7, 0 ve 7 = Pazar)
│ │ │ │ │
* * * * * çalıştırılacak komut
# Her dakika
* * * * * /path/to/script.sh
# Her gün gece yarısı
0 0 * * * /path/to/backup.sh
# Her gün sabah 3:30'da
30 3 * * * /path/to/task.sh
# Her Pazartesi sabah 9:00'da
0 9 * * 1 /path/to/weekly-report.sh
# Her 5 dakikada bir
*/5 * * * * /path/to/check.sh
# Her saat başı (0. dakikada)
0 * * * * /path/to/hourly.sh
# Her ayın ilk günü gece yarısı
0 0 1 * * /path/to/monthly.sh
# Her hafta içi (Pzt–Cum) sabah 8:00'de
0 8 * * 1-5 /path/to/workday.sh
# Hafta içi sabah 9 ile 17 arasında her 15 dakikada bir
*/15 9-17 * * 1-5 /path/to/poll.sh
# Günde iki kez (gece yarısı ve öğlen)
0 0,12 * * * /path/to/twice-daily.sh
Platforma bağlı olarak karşılaşacağınız iki yaygın cron formatı vardır:
Unix/Linux üzerinde crontab tarafından kullanılan klasik format. En küçük birim dakika'dır.
# dakika saat ayın-günü ay haftanın-günü
* * * * *
Quartz Scheduler (Java), Spring @Scheduled, AWS EventBridge ve birçok CI/CD aracı tarafından kullanılır. Başa ekstra bir saniye alanı eklenir ve sonuna isteğe bağlı bir yıl alanı eklenebilir.
# saniye dakika saat ayın-günü ay haftanın-günü [yıl]
0 30 9 * * ?
Quartz ayrıca standart cron'da bulunmayan ekstra özel karakterler sunar:
? — Belirli bir değer yok; diğeri belirlendiğinde ayın-günü veya haftanın-günü alanında kullanılır (her ikisini birden joker olmayan bir değere ayarlayamazsınız — yok saymak istediğiniz için ? kullanın)L — Son: ayın-günü alanındaki L ayın son günü; haftanın-günü alanındaki 5L ayın son Cuması anlamına gelirW — En yakın hafta içi: 15W, ayın 15'ine en yakın hafta içi günü anlamına gelir# — Ayın N. haftanın günü: 2#1 ayın ilk Pazartesisi anlamına gelir# Standart cron — her gün 09:30'da
30 9 * * *
# Quartz cron — her gün 09:30:00'da
0 30 9 * * ?
# Standart cron — her Pazartesi 08:00'de
0 8 * * 1
# Quartz cron — her Pazartesi 08:00:00'da
0 0 8 ? * MON
# Standart cron — her 5 dakikada bir
*/5 * * * *
# Quartz cron — her 5 dakikada bir
0 */5 * * * ?
# Yalnızca Quartz — her ayın son günü gece yarısı
0 0 0 L * ?
# Yalnızca Quartz — her ayın ilk Pazartesisi 09:00'da
0 0 9 ? * 2#1
? kullanır)Çoğu cron uygulaması, beş alanlı sözdizimine alternatif olarak kısayol dizelerini destekler:
@yearly (veya @annually) — Yılda bir çalıştır: 0 0 1 1 *@monthly — Ayda bir çalıştır: 0 0 1 * *@weekly — Haftada bir çalıştır: 0 0 * * 0@daily (veya @midnight) — Günde bir çalıştır: 0 0 * * *@hourly — Saatte bir çalıştır: 0 * * * *@reboot — Başlangıçta bir kez çalıştır# Crontab'ı varsayılan editörde düzenle
crontab -e
# Mevcut crontab'ı listele
crontab -l
# Crontab'ı tamamen sil
crontab -r
# Başka bir kullanıcının crontab'ını düzenle (yalnızca root)
crontab -u username -e
PATH ile minimal bir ortamda çalışırcommand >> /var/log/job.log 2>&1flock veya bir kilit dosyası kullanıncrontab -r konusunda dikkatli olun — onay almadan tüm crontab'ınızı silerCron, Unix ve Linux işletim sistemlerinde zamanlamaya dayalı bir iş zamanlayıcısıdır. Kullanıcıların komutları veya betikleri belirli zamanlarda, tarihlerde ya da aralıklarda otomatik olarak çalıştırmasını sağlar. İsim, Yunanca chronos (zaman) kelimesinden gelmektedir.
Cron job, cron daemon'u kullanılarak belirli bir zamanda veya aralıkta otomatik olarak çalışacak şekilde zamanlanmış bir görevdir. Her cron job, crontab dosyasında bir cron ifadesi (5 zaman alanı) ve ardından çalıştırılacak komuttan oluşan bir satırdır.
Cron ifadesi, bir zamanlama tanımlayan beş boşlukla ayrılmış alandan oluşan bir dizedir: dakika (0–59), saat (0–23), ayın günü (1–31), ay (1–12) ve haftanın günü (0–7). Her alan belirli değerleri, aralıkları (1-5), adım değerlerini (*/5) ve joker karakterleri (*) kabul eder.
Yıldız işareti (*), "her" anlamına gelir — o alan için geçerli olan her değerle eşleşir. * * * * * her dakika çalışır. 0 * * * * her saatin 0. dakikasında çalışır (yani her saat başı).
Cron, zamanlamaları okuyup işleri çalıştıran daemon'dur (arka plan servisi). Crontab (cron tablosu), zamanlanmış işlerin listesini saklayan yapılandırma dosyasıdır. Crontab'ınızı crontab -e ile düzenlersiniz; cron daemon'u her işi ne zaman çalıştıracağını öğrenmek için bunu okur.
Adım sözdizimini kullanın: */5 * * * * /path/to/command. */5, "0, 5, 10, 15 … 55. dakikalarda" anlamına gelir. Benzer şekilde */10 her 10 dakikada bir, */15 ise her 15 dakikada bir anlamına gelir.