Cron ile Zamanlanmış Görevler

Yazan: boratanrikulu

Kaynaklar
wiki.archlinux.org/cron
en.wikipedia.org/wiki/Cron

NOT: Anlatım için debian9 kullanılmıştır.


Sunucuda Saat Ayarlamasının Yapılması

Eğer zamanlanmış bir görev yapmak istiyorsanız ilk yapanız gereken, elinizde bulunan sunucunun sistem saatinin istediğiniz gibi olduğundan emin olmaktır. Sistem saatini aşağıdaki komut ile kontrol edebilirsiniz.

	$ date

Eğer istenenden farklı bir sonuç gözleniyor ise aşağıdaki komut ile sistem saatini bölgesel olarak yeniden ayarlayabilirsiniz.

	$ sudo dpkg-reconfigure tzdata


Zamanlanmış Görev Nedir ?

Zamanlanmış görevler sayesinde günlük-haftalık-aylık-yıllık periyotlar ile yapmanız gereken işlemleri manuel yapmak yerine otomatik olarak istenen zaman diliminde gerçekleşmesini sağlayabilirsiniz.

Zamanlanmış görevler için çoğunlukla cron kullanılır. Çoğu sistemde cron kurulu olarak gelmektedir. Ayrıca yine çoğu sistemde default olarak gelen bazı zamanlanmış cron görevleri mevcuttur.
Bunlar /etc/ altında aşağıdaki gibi bulunur.


Cron Nedir ?

Cron zamanlanmış olarak komutları çalıştırmamızı sağlayan bir daemon’dur. Çoğu linux dağıtımında yüklü olarak gelir.

Cron kullanımı için iki temel yol vardır.

Birincisi; hali hazırda sistemde /etc/ altında bulunan cron.daily, cron.hourly, cron.monthly ve cron.weekly klasörlerinine istenen script’in kopyalanmasıdır.
Bu klasörlerde bulunan scriptler, /etc/crontab‘daki ayarlamaya göre ilgili zaman dilimlerinde çalıştırılır.

/etc/crontab aşağıdaki gibidir.

İkinicisi; kullanıcıya özel crontab dosyası oluşturulmasıdır. Sıradaki başlıklarda bunun nasıl yapıldığını anlattım.


Crontab Kullanımı

Her kullanıcının kendisine ait bir crontab dosyası vardır.
Crontab ile bir crontab dosyası oluşturulduğunda bu dosyalar /var/spool/cron/crontabs/ altında tutulur. Ama bu dosyalara elle müdahale edilmemesi gerekir, bunun yerine komut satırından crontab kullanılmalıdır.

Crontab kullanım komutları aşağıdaki gibidir.

Komut Açıklama
crontab -l Komudu çalıştıran kullacının, eğer mevcut ise, crontab dosyasını gösterir
crontab -e Komudu çalıştıran kullanıcının, crontab dosyasını açar
crontab -r Komudu çalıştıran kullanıcının crontab dosyasını siler
crontab -u userName -e Başka bir kullanıcının crontab dosyasını açar

Crontab dosyasını bir kullanıcı için oluşturmak ve düzenlemek istiyorsak -e parametresini kullanmamız gerekir. Eğer ilk defa oluşturuluyorsa aşadağıki gibi boş/default bir crontab dosyası oluşacaktır.

	$ crontab -e

Crontab dosya yapısı aşağıdaki yapıdaki gibi kullanılmalıdır. Her satıra bir işlem yazılacak şekilde düzenlenmelidir.

Yukardaki ifade yerine direkt olarak aşağıdaki gibi bir yapı da kullanılabilir.

Komut Eşiti Açıklama
@yearly 0 0 1 1 * Her yılın ilk günü çalışır
@monthly 0 0 1 * * Her ayın ilk günü çalışır
@weekly 0 0 * * 0 Her hafta pazar günü çalışır
@daily 0 0 * * * Her gün gece yarısı çalışır
@hourly 0 * * * * Her saatin başlangıcında çalışır
@reboot -karşılığı yok- Her başlatma işleminde çalışır

Örneğin aşağıdaki iki satır da aynı işlemi yapmaktadır.


Basit Bir Örnek ile Gösterim

Aşağıdaki gibi elimizde basit bir backup script’i olsun, ve bu script’in blog kullanıcısı tarafından her hafta pazartesi günü saat 17:30’da çalıştırılmasını istiyor olalım.

backupScript.sh :

	#!/usr/bin/env bash
	TIME=`date +%b-%d-%y`
	FILENAME=backup-$TIME.tar.gz
	SRCDIR=*
	DESDIR=Backups
	tar -cpzf $DESDIR/$FILENAME $SRCDIR

İlk olarak blog kullanıcısına geçiş yapalım.

	$ su blog

Ardından bu kullanıcıya ait crontab dosyasını açalım.

	$ crontab -e

Dosya açıldığında aşağıdaki gibi boş bir crontab dosyası görüyoruz.

Ardından şu satırı ekleyelim :

	30 17 * * 1 /home/blog/backupScript.sh

Ardından kayıt edip ve çıkalım.

İşlem bu kadar basit. Artık sunucuda her pazartesi 17:30’da betiğin çalıştırıldığı klasördeki tüm verilerin backup’ı alınacak.