Crontab Nedir?

Cron, Unix benzeri işletim sistemlerinde bir iş zamanlayıcıdır . Yazılım ortamlarını kuran ve bakımını yapan kullanıcılar, işlerini belirli zamanlarda, tarihlerde veya aralıklarla düzenli aralıklarla çalışacak şekilde programlamak için cron'u kullanır. Genellikle sistem bakımını veya yönetimini otomatikleştirir. Cron, tekrarlayan görevleri zamanlamak için en uygun olanıdır.
Cron'un eylemleri, belirli bir programda periyodik olarak çalışacak kabuk komutlarını belirten bir yapılandırma dosyası olan bir crontab dosyası tarafından yürütülür. Crontab dosyaları, iş listelerinin ve cron arka plan programına yönelik diğer talimatların tutulduğu yerde saklanır. Kullanıcılar kendi bireysel crontab dosyalarına sahip olabilir ve genellikle sadece sistem yöneticilerinin düzenleyebileceği sistem çapında bir crontab dosyası bulunur.
Bir crontab dosyasının her satırı bir işi temsil eder ve şöyle görünür:
# ┌──────────── dakika (0 - 59)
# │ ┌──────────── saat (0 - 23)
# │ │ ┌───────────── ayın günü (1 - 31)
# │ │ │ ┌───────────── ay (1 - 12)
# │ │ │ │ ┌────────────haftanın günü (0 - 6) (Pazartan Cumartesiye;
# │ │ │ │ │ 7 de bazı sistemlerde Pazar günüdür)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * <yürütülecek komut>
Her satırın sözdizimi, komutun yürütüleceği zamanı temsil eden beş alandan oluşan bir cron ifadesi ve ardından yürütülecek bir kabuk komutu bekler.
Bir kullanıcı için yapılandırma dosyası crontab -e, gerçek uygulamanın bu dosyayı nerede sakladığına bakılmaksızın çağrılarak düzenlenebilir.
Crontab’ın editlenmesi;
crontab -e
Crontab’da yapılacak işlerin listelenmesi;
crontab -l
Crontab’da işlerin silinmesi;
crontab -r
sözdizimi
crontab -e
crontab -u user -e
Cron izinleri
Cron izinlerinde, iki dosya önemli bir rol oynar:
- /etc/cron.allow - Bu dosya varsa, o kullanıcının cron işlerini kullanmasına izin verilmesi için kullanıcının adını içermesi gerekir.
- /etc/cron.deny - cron.allow dosyası yoksa ancak /etc/cron.deny dosyası varsa, cron işlerini kullanmak için kullanıcılar /etc/cron.deny dosyasında listelenmemelidir.
Bu dosyalardan hiçbiri yoksa, siteye bağlı yapılandırma parametrelerine bağlı olarak, yalnızca süper kullanıcının cron işlerini kullanabileceğini veya tüm kullanıcıların cron işlerini kullanabileceğini unutmayın.
Crontab Örnekleri
Cron hesapları karmaşık gelebilir. Bunu için cron zamanlama ifadelerini hızlı ve basit düzenlemek için crontab.guru isimli web sitesi vardır. Bu siteye girerek hem bir çok örnek bulabilir, hemde istediğiniz zamanlamaları gerçekleştirebilirsiniz.

Crontab Kullanımı
Basit bir örnek ile başlayalım. Aşağıdaki komut çalıştırdıktan sonra, sizde bir editör seçmenizi isteyecektir. Eğer yeni bir kullanıcı iseniz nano ile devam etmeniz doğru bir karar olacaktır.
crontab -e

İlk örnekte, kullanıcının ev dizininde bize her dakika mehmetoz isminde bir dizin oluşturmasını sağlayalım.
~ tilda işareti kullanıcının ev dizinini temsil eder.
Eğer crontab -e aracı sudo yetkileri çalıştırlır ise görevler root kullanıcısına özel olur.
Görevler örnek olması adına her dakika üzerinden yapılacaktır, Crontab mantığını anladıktan sonra süreleri kendinize göre değiştirebilirsiniz.
* * * * * mkdir ~/mehmetoz

Bir dakika sonra ev dizinimin içeriğini listeliyorum. Aşağıdaki görselde dosyanın oluştuğunu görebiliyoruz.
ls

Ancak bu işlemde tahmin edeceğiniz gibi bir aksilik meydana gelecektir. Çünkü aynı isimde birden fazla dizin oluşturamayacaktır. Bunu yapma sebebim aslında bu hataları görmemiz için çıktıları bir yere yönlendirmekti. Bunun için komutumun yanına bir çıktı ekleyip hata mesajlarını bir dosyaya yönlendiriyorum.
* * * * * mkdir ~/mehmetoz >> ~/crontab.log 2>&1

Bir sonraki döngüde hata çıktımız oluşuyor. ve bize dizinin oluşturulamadığını, zaten var olduğu bilgisini veriyor.
ls
cat crontab.log

Artık kafamızda crontab ile ilgili bir şeyler oluştu. Şimdi ben docker imajlarımdan olan wordpress'i her dakika alınmasını istiyorum. İhtiyaçlarınıza göre farklı örneklerde yapabilirsiniz, yedekler alabilir, servisleri yeniden başlatabilir, log dosyalarını taşıyabilir veya silebilirsiniz.
İmajı kayıt edeceğim bir dizin oluşturuyorum. Akabinde basit bir script yazmak için editör ile dosya oluşturuyorum.
mkdir export-image
vi docker-image.sh

Dosyamız açıldıktan sonra hangi kabul ile hangi işlemleri yapılmasını istediğini yazıyoruz.

Şimdi oluşturduğumuz script'in çalışması için kullanıcı üzerinde çalıştırma izni verelim. Aksi halde işlem başarısız olacaktır.
sudo chmod u+x docker-image.sh

Son olarak crontab dosyasına çalışmasını istediğimiz scriptin yolu göstermemiz yeterlidir.
* * * * * ~/docker-image.sh >> ~/crontab.log 2>&1

Şimdi kontrol edelim. Başarılı bir şekilde imajımız geldiğini görebiliyoruz.

Yapılan işlemlerin sisteminizi nasıl etkiyeceğini, performans vb. gibi sorunlara yol açmamasını göz önünde bulundurarak yapınız.

Crontab Örnekleri
Aşağıdaki örneklerden yola çıkarak, değişiklikler yapabilirsiniz.
her dakika
* * * * *
her 5 dakikada bir
*/5 * * * *
her saat
0 * * * *
her 5 saatte bir
0 */5 * * *
her gün
0 0 * * *
her gün saat 1'de
0 1 * * *
her hafta
0 0 * * 0
her ay
0 0 1 * *
6 ayda bir
0 0 1 */6 *