Oracle Solaris Cron Sorun Çözme Rehberi

Cron sürekli tekrarlanan komut ve scriptler için kullanılabilir.Kullanıcılar cron görevlerini /var/spool/cron/crontabs klasörüne ekleyebilirler. Aşağıdaki ipuçları birçok durumda cron sorunlarının çözülmesinde yardımcı olabilir.

Önemli Cron dosyaları:

Dosya İşlevi

/etc/cron.d/cron.allow Cron görevlerini eklemeye yetkili kullanıcı listesi

/etc/cron.d/cron.deny Cron görevlerini eklemeyecek kullanıcı listesi

/var/cron/log Log Dosyası

/var/spool/cron/crontabs Tüm kullanıcılar için Crontab dosyları

Crontab dosyalarını düzenleme

En kolay yolu crontab -e komutudur. Başka bir yolu ise;

  • kullanıcınız ile oturum açın.
  • Crontab -l > dosyaismi
  • vi dosyaismi ( istediğiniz değişiklikleri yapın)
  • Crontab dosyaismi

Bunları yaptıktan sonra Cron servisini durdurmanıza gerek yoktur.

Cron servisinin durumunu kontrol etme:

# ps -ef | grep cron

Servisi durdurup başlatma:

# /etc/init.d/cron [stop|start]

Solaris 10’da Cron servisinin durumunu kontrol etme:

# svcs -p svc:/system/cron

Cron görevlerinin düzgün çalıştığından emin olmak için aşağıdaki satırı crontab’a ekleyin.

* * * * * date > /dev/console

Bu komut her dakika başında konsola tarihi basacaktır. Eğer konsolda yetkiniz yoksa, çalıştığınız pts terminali kullanabilirsiniz.

Crontab’a erişimi kontrol etme:

  • /etc/cron.d/cron.allow ya da /etc/cron.d/cron.deny dosyaları kullanabilirsiniz. Burada şuna dikkat etmeniz lazım. Eğer cron.allow dosyası yok ise cron.deny dosyası geçerli olacaktır. Cron.allow dosyası var ise ilk önce bunu kontrol eder.
  • Eğer bir kullanıcı iki dosyada mevcut ise cron.allow dosyası okunur cron.deny dosyası okunmaz.Yani kullanıcının erişim hakkı olur.
  • Eğer iki dosya da mevcut değil ise yalnızca root görevleri çalıştırabilir.

Yetkileri ve Script yolunu kontrol etme:

Aptalca gelebilir fakat, çalıştırmak istediği scripte executable yetkiyi vermeyen birçok insan gördüm.

# chmod u+x /path/to/script

Ayrıca cron girdiniz scriptin tam yolunu içermelidir.

* 5 * * * /bin/bash /path/to/script.sh

Cron Loglarını kontrol edin.

/var/cron/log log dosyası birçok durumda sorunun ne olduğu ile ilgili net ve doğru bilgiler veriyor.

Crontab’ı boşaltırken dikkatli olun.

Crontab -e ile tüm cron görevlerini silseniz de , crontab -l tüm cron görevlerini gösterir. Çünkü crontab -e boş crontab dosyası ile ne yapacağını bilemez ve değişiklikleri güncellemez. Tüm görevleri silmenin uygun yolu şudur:

# crontab -r

Cron yetkilerini kontrol edin.

Bazen error in message queue open” hatası ile karşılaşabilirsiniz. Bunun nedenlerinden biri de cron ve crontab’ a verilen hatalı yetkilerdir. Cron ve Crontab’ın düzgün yetkileri:

# ls -l /usr/sbin/cron

-r-xr-xr-x 1 root sys 57420 Jan 22 2005 /usr/sbin/cron

# ls -l /usr/bin/crontab

-r-sr-xr-x 1 root bin 20336 Jan 22 2005 /usr/bin/crontab

Setuid yetkilerine dikkat edin.

Crontab-e komutu birtakım numaralar ve soru işareti ile cevap veriyor.

Bunun nedeni varsayılan editorun “vi” olarak ayarlanmamasından kaynaklanıyor. Düzeltmek için;

# EDITOR=vi

# export EDITOR

Kullanıcının parola süresi geçmiş.

Birçok kez sadece kullanıcının parola süresi dolduğu için cron görevleri başarısız olur.

/var/cron/log’ta şu hatayla görülebilir.

Authentication token is no longer valid; new one required

CRON (oracle) ERROR: failed to open PAM security session: Success

CRON (oracle) ERROR: cannot set security context

Düzeltmek için kullanıcının parola süresini uzatın :

# passwd -x 10 oracle (oracle burada kullanıcı ismi)

Özel karakterleri ve anlamlarını yönlendirme:

0 5 * * * /bin/bash -l -c ‘export RAILS_ENV=my_env; cd /my_folder; ./script/script.rb 2>&1 > ./log/my_log.log’

Dosya açıklayıcısını yönlendirme:

3 adet standard dosya açıklayıcısı vardır :

1. stdin 0 – Program Standard girişi.

2. stdout 1 – Program Standard çıkışı.

3. stderr 2 – Programdan Standard hata çıkışı.

Normalde stdin klavyedendir. stdout ve stder terminale gider. Fakat bunu yönlendirebiliriz.

2>&1”. Standard hata çıkışını komuttan al ve standard çıkış nereye gidiyorsa oraya yönlendir demektir.

Bazı semboller:

; Tek satırdaki iki komutu ayırmak için kullanılır.
& Komutu arka planda çalıştırır.
&& Takip eden komutu bir önceki komut başarılı ise çalıştır. Başarılı değilse çalıştırma demektir.(örnek: grep string dosyaadı && cat dosyaadı)
|| Takip eden komutu bir önceki komut başarılı olarak çalışmamışsa çalıştır. (örnek, grep string dosyaadı || echo “”String not found””)”
( ) Parantez içindeki komut alt kabukta çalışır.
Bu işaretten sonraki özel anlamlı karakterlere anlamı dahilinde yol verme. Düz oku demektir.
Bir sonraki karakteri harfi harfine yorumla. Ayrıca bir satırdan fazla süren komutlar için kullanılır. Böylelikle kullanıcı yazmaya devam edebilir.
” “ Değişken(variable) ve komut değişimlerine izin ver.
`komut` bu komutun çıktısını değişken olarak algıla.
# Bu işaretten sonraki herşey yorum olarak algılanır ve işlem yapılmaz. Unutkan biriyseniz yorumlarınızı yazmanızda fayda var. 3 ay sonra neyi neden yaptığınızı hatırlamanızda fayda sağlar.

 

Hakkında Ahmet ZAN

Cevapla

E-posta adresiniz yayınlanmayacak. Gerekli alanlar işaretlenmelidir *

*

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.