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/
Teşekkürler Yasemin, eline sağlık 🙂
Ben de teşekkür ederim 🙂
crontab da başka bir sunucuya yedek alamk için ne yapmak gerekir?