Posts tagged: cron

Sep 02 2009

cron

Linuxda biz sistemi elə düzəldə bilərik ki, o lazım olan proqramı avtomatik özü etsin. Başqa sözlə bəzən bizə müəyyən bir proqramı, komandanı, scripti bizim təsirimiz olmadan, gələcəkdə öz-özünə işə düşməsin istəyirik. Bunun üçün Linux bizi iki deamonla təmin edir.

  • at deamon
  • cron deamon

at deamon vasitəsi ilə biz prosessin gələcəkdə nə vaxtsa bir dəfə yerinə yetirilməsini edə bilərik. Yəni at deamon ilə istədiyimiz bir iş gələcəkdə görülür, lakin bir dəfə bu görülür. at deamonu yaxşıdır, amma dediyim kimi onunla proses gələcəkdə bir dəfə çağrılır. Lakin bizə çox zaman müəyyən işləri (məsələn backup) gələcəkdə müəyyən vaxtdan bir etmək tələb olunur. Bunun üçün cron deamon istifadə olunur.
Cron deamon nədir?
- cron deamon daim sistemin arxa planında işləyən servisdir. Bu servis hər dəqiqədə crontab adlı faylı yoxlayır və əgər orda yerinə yetirilməsi lazım olan iş varsa onu edir. Susmaya görə cron deamon hər dəfə sistem boot edəndə avtomatik işə düşür. Əgər avtomatik işə düşməsə, onda siz

[root@alihost ali]# service crond start
Starting crond: [ OK ]

komandası vasitəsi ilə onu işə sala bilərsiz. Və ya

[root@alihost ali]# /etc/init.d/crond start
Starting crond: [ OK ]

komandası vastisəsi ilə crond servisin işə sala bilərsiz. Amma bir çox Linux distributivində bu, hər dəfə sistem işə düşəndə avtomatik işə düşür. Crondan istifadə etməklə çoxlu vaxt və enerjiyə qənaət edə bilərsiz. Əsasən vaxtaşırı backup üçün cronu istifadə etmək əla seçimdir.
Yaxşı, indi baxaq görək cronu necə işlətmək lazımdır. /etc/ kataloquna baxsaz, orda crona aid bir neçə fayl görəcəksiniz.

[ali@alihost ~]$ ls /etc/cron
cron.d/ cron.deny cron.monthly/ cron.weekly/
cron.daily/ cron.hourly/ crontab

Bu scriptlərin hər birin cron servisi müəyyən olunmuş vaxtda çağırır (run edir). Məsələn /etc/cron.daily

[ali@alihost ~]$ ls /etc/cron.daily/
00webalizer certwatch inn-cron-expire makewhatis.cron prelink rpm
0logwatch cups logrotate mlocate.cron readahead.cron tmpwatch

/etc/cron.daily scripti hər gün bir dəfə sistemi qaydaya salır (clean up). Əgər siz scriptinizin bu vaxtlarda işə düşməsini (yəni cron.daily/ hər gün bir dəfə, cron.hourly/ hər saatdan bir və s) istəyirsinizsə, onda sadəcə yaratdığınız scripti uyğun kataloqa atın. Əgər bu 4 vaxtdan başqa vaxta scriptinizi icra etmək istəsəz onda necə ? Əgər siz öz istədiyiniz vaxtlarda scripti işə salmaq istəyirsinizsə, onda crontab fayl yaratmaq lazımdır. Bu da çox asandır. crontab fayl text fayl olub, hər sətri bir iş üçün istifadə edilir. Hər sətir 6 hissədən ibarətdir və hər hissə tab vasitəsi ilə ayrılıb.

  1. Dəqiqələr (Minutes) Bu hissə saatdan necə dəqiqə sonra komandanın çağrılmasını göstərmək üçündür.
  2. Saat (Hour) . Bu hansı saatda yerinə yetirilməni göstərmək üçündür. 0-23
  3. Gün (Day). Bu ayın hansı günündə komandanın çağrılmasını bildirir.
  4. Ay (Month). Bu ilin hansı ayında komandanı yerinə yetirmək lazımdır.
  5. Həftənin günləri. Bazar günü -0, Şənbə – 6.
  6. Komandanın adı, bura komandanın tam yolu da daxildir.

Çox vaxt bu hissələrdən birində və ya bir neçəsində * işarəsi istifadə oluna bilər. * yəni “hər vaxt”, başqa sözlə elə bil həmin hissəni nəzər almır. Məsələn, həftənin günləri olan hissədə * işarəsi varsa, onda deməli həftənin hansı günü olur – olsun komanda çağrıla bilər (digər hissələrdə göstərilmiş vaxtda). Məsələn, hər ay, bazar günündən başqa hər gün saat 15:10 da tar komandası ilə /home kataloqun backup etmək istəyirəm. Onda

10 15 * * 1-6 /bin/tar -cvf /media/My_Book/backup.tar /home

komandasın /etc/crontab (OpenSuseda /etc/crontab.d) faylına elavə etmək lazımdır. Lakin bunu yalnız root edə bilər. İstifadəçi isə öz cron faylın crontab -e komandası vasitəsi ilə yarada bilər. Terminaldan crontab -e daxil edin və vi editoru, boş açılacaq. İnsert edib, yuxarıdakıları əlavə edək. Burda bir şey demək istərdim. Yuxarıda gördüyümüz kimi sistem cron faylları /etc/ kataloqunda yerləşir, istifadəçi cron faylları isə /var/spool/cron/ (OpenSuseda /etc/spool/cron/tabs)
kataloqunda yerləşir.

[root@alihost ali]# cat /var/spool/cron/ali
10 15 * * 1-6 /bin/tar -cvf /media/My_Book/backup.tar /home

crontab -l komandası vasitəsi ilə istifadəçi öz crontabında olan işlərin siyahısına baxa bilər.

[ali@alihost ~]$ crontab -l
10 15 * * 1-6 /bin/tar -cvf /media/My_Book/backup.tar /home

crontab -r komandası ilə isə, siyahıda olan işləri silmək olar.

[ali@alihost ~]$ crontab -r
[ali@alihost ~]$ crontab -l
no crontab for ali

Sualınız varsa, buyurun.

Alibi3col theme by Themocracy