Crontab'ın çalışıp çalışmadığını kontrol edin


82

Belirli bir crontab'ın düzgün çalışıp çalışmadığını kontrol etmek istiyorum. Bunun gibi bir iş ekledim:

  */2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1

Boş cihaza yönlendirdiğimi biliyorum, ancak yukarıdaki komutun iyi olup olmadığından emin değilim.

* Düzenleme 1: Her iki dakikada bir / var / log / syslog dosyasında aşağıdaki hatayı alıyorum:

 (CRON) error (grandchild #2788 failed with exit status 2)

* Düzenleme 2: Bu yeni işle ilgili günlüklerde hata yok:

 */2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1

maalesef yukarıda anlatılanların hepsi benim için çalışmıyor. deneme / bin / sh -c "(PATH = / bin; /tmp/trial.sh </ dev / null)" dediğiniz gibi "/ bin / sh: PATH = / bin ne olduğundan emin değil, aşağıdaki mesajı gösterir. : bir tanımlayıcı değil

Yanıtlar:


73

Crontab girişinin sözdizimi doğru görünüyor. Aslında, " crontab -e" (gerektiği gibi) kullanarak crontab'ınızı düzenlerseniz, yine de sözdizimsel olarak geçersiz bir crontab girişi belirtirseniz bir hata alırsınız.

  1. Öncelikle, /path_to_my_php_script/info.phpkomut satırından düzgün çalışıyor mu?

  2. Eğer öyleyse, bu şekilde de doğru çalışıyor mu ?:

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
    
  3. Bu işe yararsa, böyle çalışır mı?

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null >/dev/null 2>&1)"
    

Adım (3), cron'un programınızı nasıl çalıştıracağına benzer ("man 5 cron" da belgelendiği gibi).

Karşılaştığınız en büyük sorun PATH cron'un programınızı çalıştırmak için kullanması çok kısıtlayıcı. Bu nedenle, crontab girişinizin üstüne aşağıdakine benzer bir şeyler eklemek isteyebilirsiniz (betiğinizin ihtiyaç duyacağı her hangi bir dizine eklemeniz gerekir):

PATH=~/bin:/usr/bin/:/bin

Ayrıca cron'un /bin/shbash değil varsayılan kullanım olacağını unutmayın . Eğer bash ihtiyacınız varsa, bunu crontab dosyanızın başına da ekleyin:

SHELL=/bin/bash

Her iki değişiklik de tüm crontab girişlerini etkileyecektir . Bu değerleri info.phpprogramınız için değiştirmek isterseniz , bunun gibi bir şey yapabilirsiniz:

*/2 * * * * /bin/bash -c ". ~/.bashrc; /path_to_my_php_script/info.php"

Ayrıca "posta" için yapılandırılmış bir sistemde (diğer bir deyişle MTA'nın [sendmail / postfix / etc] yapılandırılmış bir sistemi), crontab programlarının tüm çıktılarının e-posta yoluyla otomatik olarak gönderildiğini belirtmekte fayda var. Varsayılan bir Ubuntu masaüstü sisteminde yerel posta yapılandırılmaz, ancak bir sunucu üzerinde çalışıyorsanız, tüm bu cron postalarını görmek için bir terminalde "posta" yazabilirsiniz. Bu aynı zamanda " at" komutu için de geçerlidir .


2
2. adım için izin verilmedi. Ne yapmalıyım?
akikara

@akikara chmod + x ./cron.sh - açıkça ./cron.sh dosyasını dosyanızın konumu ne olursa olsun, neyi çalıştırmaya çalışıyorsanız,
Tisch

46

Çok nadir olmasına rağmen, bazen hizmet çalışırken bile cron düzgün çalışmayı durdurur. Aşağıda crond'un çalıştığını doğrulayın ve servisi durdurun / başlatın.

Linux'ta:

service crond status
service crond stop
service crond start

Ubuntu ve diğer Debian tabanlı sistemlerde:

service cron status
service cron stop
service cron start

13
Sadece bir not ... Ubuntu için cron, öyle değilcrond
Amit Kohli

32

Hata çıktısını cron çıktısı için / dev / null ve grep / var / log / syslog dizinine yönlendirmeyin.

grep cron /var/log/syslog

Düzenlemeden sonra bir dosyayı kaydederken /etc/crontabya da içinde /etc/cron.d/bulunan dosyaları hemen gösterebilirsiniz :

tail -f /var/log/syslog | grep --line-buffered cron

Düzenleme tamamsa, yalnızca RELOADbildirimi göreceksiniz , hatalar gibi

Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new 

18

Aktif kronunuzu terminal komutuyla görebilirsiniz:

crontab -l

İşte sırayla parametreler:

  1. dak (0 - 59)

  2. saat (0 - 23)

  3. ayın günü (1 - 31)

  4. ay (1 - 12)

  5. haftanın günü (0 - 6) (Pazar = 0)

  6. komuta

Sen de senaryoyu her saatin ilk dakikasında bir çağırıyorsun. Çıktınızı test amacıyla daha sık aralıklarla test etmelisiniz:

* * * * * <command> #Runs every minute

Bu her dakika arayacak!


* / 2 * * * * Her iki dakikada bir
değiştim


2

Ayrıca run-partscron işlerini grup dışı yapmak için de kullanabileceğinizi düşünüyorum . Aslında cron, periyodik cron işlerini yürütmek için kendisini kullanır, bu yüzden uygun argümanları sağlayarak bunları istediğiniz zaman çalıştırabilirsiniz.

Örnekte tanımlanan tüm cron işleri yerine sadece bir dosyayı çalıştırmak istiyorsanız /etc/cron.daily, regex argümanını geçerli bir regex ile birlikte sağlamanız gerekecektir.run-parts --list --regex '^p.*d$' /etc

Cron işlerinin genellikle bir uzantı olmadan adlandırıldığını ve çalıştırılabilir olarak işaretlendiğini unutmayın; bu nedenle komut dosyalarınızın benzer olduğundan emin olun, ancak bir regex kullanmak, uzantı içeren bir komut dosyasını tetiklemenize izin verebilir.


1

ah !!

cevabı kendim aldım, kontrol ettim ve crondvarsayılan kurulum dizininde bulamadım./etc/init.d/

Şimdi dener ve cevaplayacağım.

Not - Ben kontrol etti cron.allow, cron.denyçok. Şimdiye kadar her şey yolunda.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.