crontab
cron
, Unix benzeri işletim sistemlerinde belirli komutları veya betikleri (script) düzenli aralıklarla otomatik olarak çalıştırmak için kullanılan standart bir zamanlama daemon'ıdır (arka plan süreci). Çalıştırılacak görevler crontab (cron table) adı verilen dosyalarda tanımlanır.
Crontab Dosyaları
Cron görevleri birkaç farklı yerde tanımlanabilir:
Kullanıcı Crontab'ları: Her kullanıcının kendi zamanlanmış görevlerini tanımlayabileceği özel bir crontab dosyası vardır. Bu dosyalar genellikle
/var/spool/cron/crontabs/
(veya benzeri bir dizinde) saklanır ancak doğrudan düzenlenmezler. Kullanıcılar kendi crontab'larını yönetmek içincrontab
komutunu kullanır. Bu crontab'daki komutlar, o kullanıcının yetkileriyle çalışır.Sistem Geneli Crontab (
/etc/crontab
): Bu dosya, sistem genelindeki görevleri tanımlar. Kullanıcı crontab'larından farklı olarak, bu dosyada her satırda komutun hangi kullanıcı olarak çalıştırılacağı belirtilmelidir./etc/cron.d/
Dizini: Sistem yöneticileri veya paketler, zamanlanmış görev tanımlarını bu dizine ayrı dosyalar halinde koyabilirler. Bu dosyalardaki format genellikle/etc/crontab
ile aynıdır (kullanıcı belirtilmesi gerekir).Ön Tanımlı Zaman Aralıkları Dizini:
/etc/cron.hourly/
,/etc/cron.daily/
,/etc/cron.weekly/
,/etc/cron.monthly/
dizinlerine yerleştirilen çalıştırılabilir betikler, isimlerine uygun aralıklarla (run-parts
komutu aracılığıyla, genellikle/etc/crontab
içinden tetiklenerek) otomatik olarak çalıştırılır.
Crontab Satır Formatı
Bir crontab dosyasındaki (kullanıcı crontab'ı veya /etc/crontab
, /etc/cron.d/
dosyaları) her satır bir zamanlanmış görevi temsil eder ve genellikle şu formatı takip eder:
İlk beş alan zamanlamayı belirler.
/etc/crontab
ve/etc/cron.d/
dosyalarında altıncı alan komutun çalıştırılacağı kullanıcı adıdır. Kullanıcı crontab'larında bu alan bulunmaz, komut crontab sahibi kullanıcı olarak çalışır.Geri kalan kısım ise çalıştırılacak komut veya betiktir.
Özel Karakterler:
*
(Yıldız): İlgili alan için tüm olası değerleri ifade eder ("her"). Örneğin, dakika alanındaki*
"her dakika" anlamına gelir.,
(Virgül): Değer listelerini ayırmak için kullanılır. Örneğin, saat alanındaki8,12,18
"saat 8, 12 ve 18'de" anlamına gelir.-
(Tire): Değer aralıklarını belirtmek için kullanılır. Örneğin, haftanın günü alanındaki1-5
"Pazartesiden Cumaya kadar" (Pazartesi=1) anlamına gelir./
(Bölü): Adım değerlerini belirtmek için kullanılır. Örneğin, dakika alanındaki*/15
"her 15 dakikada bir" (0, 15, 30, 45) anlamına gelir. Saat alanındaki8-18/2
"saat 8'den 18'e kadar her 2 saatte bir" (8, 10, 12, 14, 16, 18) anlamına gelir.
Özel Zaman Dizgeleri: Bazı cron
implementasyonları, yaygın zamanlamalar için özel dizgeleri destekler:
@reboot
: Sistem başlangıcında bir kez çalıştırılır.@yearly
veya@annually
: Yılda bir kez çalıştırılır (0 0 1 1 *
).@monthly
: Ayda bir kez çalıştırılır (0 0 1 * *
).@weekly
: Haftada bir kez çalıştırılır (0 0 * * 0
).@daily
veya@midnight
: Günde bir kez çalıştırılır (0 0 * * *
).@hourly
: Saatte bir kez çalıştırılır (0 * * * *
).
Örnek Crontab Satırları:
crontab
Komutu
crontab
KomutuKullanıcılar kendi crontab dosyalarını yönetmek için crontab
komutunu kullanır:
crontab -e
: Mevcut kullanıcının crontab dosyasını düzenlemek için varsayılan metin düzenleyiciyi açar. İlk kez çalıştırıldığında genellikle hangi düzenleyiciyi kullanmak istediğinizi sorar. Dosyayı kaydedip çıktığınızda yeni zamanlanmış görevler aktif olur.crontab -l
: Mevcut kullanıcının crontab dosyasının içeriğini listeler.crontab -r
: Mevcut kullanıcının crontab dosyasını komple siler. Dikkatli kullanılmalıdır! Yanlışlıkla silmeye karşı genellikle onay istemez.crontab -u <kullanıcı_adı> -e|-l|-r
: (Sadece root tarafından) Belirtilen kullanıcının crontab dosyasını yönetmek için kullanılır.
Ortam Değişkenleri ve Çıktı Yönetimi
Ortam: Cron görevleri, normal bir kullanıcı kabuğuna göre çok daha kısıtlı bir ortam değişkeni seti ile çalışır. Özellikle
PATH
değişkeni sınırlı olabilir. Bu nedenle, cron görevlerinde çalıştırılan komutların veya betiklerin içinde kullanılan diğer komutların tam yollarını belirtmek (örn./usr/bin/python3
yerine sadecepython3
yazmamak) genellikle daha güvenilirdir. Crontab dosyasının başınaPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
gibi bir satır ekleyerek PATH'i ayarlamak da mümkündür.Çıktı: Varsayılan olarak, bir cron görevinin standart çıktısı (stdout) veya standart hatası (stderr) olursa, bu çıktı crontab sahibi kullanıcıya e-posta olarak gönderilir (eğer sistemde bir posta transfer ajanı - MTA - yapılandırılmışsa).
Çıktıyı bir dosyaya yönlendirmek için standart kabuk yönlendirmeleri kullanılır:
(
>
üzerine yazar,>>
sona ekler,2>&1
stderr'i stdout'a yönlendirir).Tüm çıktıyı engellemek için
/dev/null
'a yönlendirilebilir:E-postanın gönderileceği adresi değiştirmek için crontab dosyasının başına
MAILTO
değişkeni eklenebilir:E-posta gönderimini tamamen engellemek için
MAILTO
boş bırakılabilir:
cron
, sistem bakımı, yedekleme, raporlama gibi birçok görevi otomatikleştirmek için vazgeçilmez bir araçtır.
Last updated