Bash betiğini root olarak çalıştırmak için her ayın 7,37'sinde, her ayın her saatinde, ayın her ayında her ay, her ay bir kök cron işi kurmaya çalıştım. Bu komut dosyası içinde bulunur /usr/bin
ve adlandırılır tunlrupdate.sh
. Tunlr'ın DNS'ini günceller.
$ ls -l /usr/bin/tunlrupdate.sh
-rwxr-xr-x 1 root root 2133 Sep 24 15:42 /usr/bin/tunlrupdate.sh
Bu Bash betiği burada mevcuttur .
Çağrıldığında, komut dosyası içinde bulunan bir günlükte neler olduğunu yazar. /var/log/tunlr.log
Bu root cron job'unu eklemek için root'un crontab standardını kullandım.
sudo crontab -e
Ve sonunda bu 2 satırı ekledik. Cron'un betiği root olarak çalıştırmasını bekliyorum.
# check for updated Tunlr DNS every 30 minutes at the hour + 7 mn and hour + 37 mn
07,37 * * * * root /usr/bin/tunlrupdate.sh
Daha sonraki bir komut sudo crontab -l
, cron işinin eklendiğini onayladı.
Ubuntu'yu yeniden başlattım ve cron işi düzgün bir şekilde başlatılıp başlatılmadığını günlük dosyasında kontrol ediyordum. Ancak, günlük dosyasında /var/log/tunlr.log
işin başarıyla başlatılmadığı anlamına gelen hiçbir şey yoktur .
Komut dosyasını komut satırından çalıştırıp çalıştırmadığımı kontrol ettim
sudo /usr/bin/tunlrupdate.sh
daha sonra logfile buna göre güncellenir.
Neden bu cron işi sistemimde planladığım gibi çalışmıyor?
GÜNCELLEME 1: Şimdiye kadar önerilen tüm çözümler çalışmıyor. CLI'ye sistem günlüğünü listelemesi için teşekkür ederim sudo grep CRON /var/log/syslog
. Ancak bir CRON hatası aldın
CRON[13092]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ]
&& find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php
/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
Önerilen PATH ile = komut dosyasındaki işlevler için kökten mutlak yolun eklenmesi ve kullanılması veya burada önerilen çözümler olmadan. Hala bu hatayı alıyorum.
Bazı aramalardan sonra /usr/lib/php5/maxlifetime
, burada açıklandığı şekilde dosyadaki hatayı saptadım :Change #!/bin/sh -e --> #!/bin/sh -x
Sonra sistemimde CRON hata günlüğünü listeleme
sudo grep CRON /var/log/syslog
Feb 11 18:07:01 Marius-PC CRON[14067]: (root) CMD (root /usr/bin/tunlrupdate.sh)
Feb 11 18:07:01 Marius-PC CRON[14066]: (root) MAIL (mailed 1 byte of output; but got
status 0x00ff, #012)
Hala bash betiğini çalıştırmıyorum. Bu kez kayıtta hiçbir hata gösterilmez. Güvence almak için bu betiğin içeriği değildi. Betiği şu 3 satıra indirdim:
#!/bin/bash
LOGFILE=/var/log/tunlr.log
echo $LOGFILE >> $LOGFILE
Hala cron işinden geçemiyorum. Günlük dosyasına hiçbir şey yazılmıyor. Yani boş bir komut dosyası bile cronda çalışmayacak mı? Anlamadım. Bu 2 satıra indirgenmiş bir komut dosyası kullanmayı biliyorum:
#!/bin/bash
exit 0
Ve hala aynı hata günlüğü. Cron senaryosu geçmiyor ...