Crontab nedir, nasıl kullanılır?

Yasemin Gürcan —  6 Ağustos 2014 — 4 Comments

Cron, Unix tabanlı işletim sistemlerinde zaman bazlı çalışan bir görev planlayıcısıdır (job scheduler). Sistem tarafında yaptırmak istediğimiz görevi belirlediğimiz zaman aralıklarında çalıştırır. /etc dizini altındaki crontab dosyası ise cronların çalışma zamanını ve görevlerini barındıran yapılandırma dosyasıdır. Windows’ taki karşılığı ise zamanlanmış görevlerdir.

Aşağıda crontab yapılandırma dosyasını görebilirsiniz.

 
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Dosyanın içinde gördüğümüz /etc/cron.monthly aylık, /etc/cron.weekly haftalık, /etc/cron.daily günlük, /etc/cron.hourly her saat çalışan cron’ların bulunduğu dosyalardır.

Aşağıdaki gibi her bir dosyada  çalışan süreçleri görebilirsiniz. Ben sadece /etc/cron.daily dizini gösterdim. Diğerlerine de bulunduğu dizine giderek bakabilirsiniz. vim editörü ile herhangi birini açtığımızda içerisinde çalışan betiği(script) inceleyebilirsiniz.

-rwxr-xr-x 1 root root   311 May 23  2012 0anacron
-rwxr-xr-x 1 root root 14985 Nov 16  2013 apt
-rwxr-xr-x 1 root root   314 Nov  7  2012 aptitude
-rwxr-xr-x 1 root root   355 Jun 11  2012 bsdmainutils
-rwxr-xr-x 1 root root   256 Oct  1  2013 dpkg
-rwxr-xr-x 1 root root  4125 Jan  2  2013 exim4-base
-rwxr-xr-x 1 root root   218 Jul 16 13:47 logrotate
-rwxr-xr-x 1 root root  1365 Jun 19  2012 man-db
-rwxr-xr-x 1 root root   606 Sep 25  2010 mlocate
-rwxr-xr-x 1 root root   249 May 26  2012 passwd

Crontab komutunun kullanımı

crontab -e
Crontab dosyasını düzenler eğer dosya yoksa oluşturur. Dosyayı düzenlemek için vim ya da nano editörlerinden birini kullanabiliriz. Editörü değiştirmek isterseniz

export EDITOR=yeni_editör komutu ile değiştirebilirsiniz.

crontab -l
Cron içerisinde yapılan işleri listeler.
Komut çalıştığında benim sistemimdeki çıktı aşağıdaki gibidir.

# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
45 14 * * *  pg_dump -U postgres -Fd okul -f /home/yasemin/Desktop/yeni.dump
56 14 * * * sh /home/yasemin/dump.sh

crontab -r
Tüm crontab dosyasını siler.

Bir cronun yapısı aşağıdaki gibidir:

* * *  * * /dosya_yolu/dosya_adı veya komut

|    |    |   |   |____Haftanın günleri (0 – 6 Pazar=0)

|    |   |   |______Ay(1 -12)

|    |   |________Ayın günleri (1 – 31)

|    |__________Saat(0 – 23)

|_____________Dakika(0 – 59)

Özel Karakterler

Yıldız işareti (*):Yukarıdaki bir bölüm * ile tanımlanırsa yapılacak olan işin her gün, her ay, her saat vb. çalışacağını belirtir.

*  *  *  *  *     :Her dakika da bir kere  çalışır.

0  0  1  *  *   :Her ay  bir kere çalışır.

0  0  0  1  *  :Her yıl bir kere çalışır.

Bölme işareti(/): Tanımlanan alandaki kademeleri ifade eder. Dakika alanında tanımlanırsa */10 gibi her 10 dakikada bir çalış anlamına gelir.

*  */10  *  *  *  :Her 10 saatte bir çalışır.

Kısa Çizgi(-): Zaman aralığı belirlemek için kullanılır. Örneğin saat alanında 09-16 şeklinde tanımladığımızda  sabah saat 9’dan 16′ ya kadar çalışan bir cron oluştururuz.

0  09-16  *  *  *  :Her ay, ayın her günü 9’dan 16’ya kadar çalışır.

Virgül ( , ) : Bir alanda birkaç değer belirtmek için kullanılır. Örneğin; hafta bölümünde (1,3,5) gibi tanımlarsak pazartesi,çarşamba ve cuma günü çalışır.

0  20  *  10  2,4 : Ekim ayının her salı ve perşembe günü saat 20:00’de çalışır.

Veritabanının yedeğini alan bir uygulama yapalım.

01 00 * * *  pg_dump -U postgres -Fd okul -f /home/yasemin/Desktop/yedek/okul_yedek.dump

Yukarıdaki örnek, okul isimli veritabanının yedeğini okul_yedek.dump dosyasına alan bir cron uygulamasıdır.

Ayrıca bu işlemi bir betik tanımlayarak da yapabiliriz. Aşağıdaki gibi oluşturduğumuz betiği ben  dump.sh olarak kaydettim. Betiğin sorunsuz çalışması için çalışma izni de vermeliyiz.

chmod +x dump.sh komutu ile dump.sh dosyasına çalışma iznini verdik.

#!/bin/bash
pg_dump -U postgres -Fd okul -f /home/yasemin/Desktop/yedek.dump

crontab -e ile açtığımız dosyaya aşağıdaki gibi çalışacağı zamanı ve çalışacak olan betiğin yolunu yazarak kaydettik.

01 00 * * * sh /home/yasemin/dump.sh

00:01 de /home/yasemin/ dizinindeki dump.sh  betik dosyası çalışır.Oluşan veritabanı yedek dosyası yedek.dump  olarak  /home/yasemin/Desktop/ dizininde yaratılır.

Böylece bir cron un nasıl çalıştığını, kullandığı parametreleri ve crontab ile betik çalıştırmayı öğrendik.

Kaynaklar:

http://en.wikipedia.org/wiki/Cron

http://www.thegeekstuff.com/2009/06/15-practical-crontab-examples/

Yasemin Gürcan

Posts

Süleyman Demirel Üniversitesi Bilgisayar Mühendisliği 3. sınıf öğrencisiyim. Markafoni'de IT stajyeri olarak çalışıyorum.PostgreSQL, Linux konularına yoğunlaştım. Teknik yazılar yazarak Kadın Yazılımcı'nın yaygınlaşmasına çalışıyorum.

4 responses to Crontab nedir, nasıl kullanılır?

  1. Kemalettin Yeşilkaya 6 Ağustos 2014 at 17:08

    Teşekkürler Yasemin, eline sağlık 🙂

  2. crontab da başka bir sunucuya yedek alamk için ne yapmak gerekir?

Trackbacks and Pingbacks:

  1. Laravel Zamanlanmış Görev | Fatih Demirağ - 22 Şubat 2019

    […] Detaylı Bilgi İçin : https://www.kadinyazilimci.com/crontab-nedir-nasil-kullanilir/ […]

erencan8887@gmail.com için bir cevap yazın Cevabı iptal et