it-swarm-tr.com

Cron hataları nerede günlüğe kaydedilir?

cron işlerini yanlış ayarlarsam sessizce başarısız olurlar. Neyin yanlış gittiğini anlamak için nerede hata günlüğü aramalıyım?

182
Brian Lyttle

Diğerlerinin de belirttiği gibi, cron çalıştırdığı herhangi bir programın çıktısını size gönderir (çıktı varsa). Yani, herhangi bir çıktı almazsanız, temel olarak üç olasılık vardır:

  1. crond, programı çalıştırmak veya e-posta göndermek için bir Shell bile başlatamadı
  2. crond çıktıyı gönderirken sorun yaşadı veya posta kayboldu.
  3. program herhangi bir çıktı üretmedi (hata mesajları dahil)

Durum 1 çok olası değildir, ancak cron günlüklerine bir şeyler yazılmalıdır. Cron'un kendi ayrılmış bir sistem günlüğü özelliği vardır, bu nedenle cron tesisinin iletilerinin nereye gönderildiğini görmek için /etc/syslog.conf (Veya dağıtımınızdaki eşdeğer dosyaya) göz atmanız gerekir. Popüler yerler arasında /var/log/cron, /var/log/messages Ve /var/log/syslog Bulunmaktadır.

2. durumda, posta gönderen arka plan programı günlüklerini incelemelisiniz: Cron arka plan programından gelen iletiler genellikle [email protected] Adresinden gelir. Cron'un belirli bir adrese e-posta göndermesini sağlamak için crontab dosyasındaki MAILTO=... Satırını kullanabilirsiniz, bu da e-posta arka plan programı günlüklerini grep etmeyi kolaylaştırır. Örneğin:

[email protected]
00 15 * * *  echo "Just testing if crond sends email"

3. durumda, etkisini kolayca kontrol edebileceğiniz başka bir komut ekleyerek programın gerçekten çalıştırılıp çalıştırılmadığını test edebilirsiniz: örneğin,

00 15 * * * /a/command; touch /tmp/a_command_has_run

böylece crond öğesinin gerçekten çalışıp çalışmadığını /tmp/a_command_has_run zamanına bakarak kontrol edebilirsiniz.

116
Riccardo Murri

İş çıktısını her zaman açıkça bir günlük dosyasına gönderebilirsiniz:

0 8 * * * /usr/local/bin/myjob > /var/log/myjob.log 2>&1

Bunun daha önce bahsedilen posta davranışının yerini alacağını unutmayın, çünkü crond'un kendisi işten herhangi bir çıktı almayacaktır. Eğer bu davranışı korumak istiyorsanız tee (1) 'e bakmalısınız.

54
codehead

Postaları görmüyorsanız, o hesabı izlemek için kullanan kişiler için oldukça can sıkıcı olabilecek hatalarla birlikte şirketinize kök salmış olabilirsiniz. Çıktıyı Syslog'a göndermeyi deneyin:

*/5 * * * * yourcronjob 2>&1 | /usr/bin/logger -t yourtag

Ardından, cronjob'un çalışmasını bekleyin ve/var/log/messages (veya bazı sistemlerde /var/log/user.log) hatasını arayın.

Bu, yalnızca "satırınız: komut bulunamadı" gibi yalnızca 1-2 satır uzunluğundaki hata iletileri için harika çalışır. Ayrıca mevcut sistem günlüğü altyapınızı (Logrotation, merkezi sistem günlüğü, Splunk vb.) Kullanır.

Cronjob'ınız yüzlerce satır çıktı üretiyorsa iyi bir çözüm olmayabilir.

44
Stefan Lasiewski

İş ya çalışmadığında ya da sıfır dışında bir çıkış kodu döndürdüğünde crond adresinden e-posta almalısınız. Yazmayı deneyin:

$ mailx

komut isteminde.

mailx(1), çoğu Unixlike sisteminin temel posta okuma programıdır. Modern standartlara göre çok ilkeldir, ancak her zaman kullanılabilir olmak için hemen hemen ona güvenebilirsiniz. Diğer, daha iyi posta aracıları kullanılabilir, ancak bunlardan hangisini kullandığınızı rasgele bir makineye yüklediğinizi asla bilemeyeceksiniz.

Sisteminizi bir İnternet e-posta sunucusu olarak yapılandırmadıysanız, bu posta alt sisteminin yalnızca makinede kullanıldığını unutmayın. Makinedeki diğer kullanıcılara e-posta gönderip alabilirsiniz, ancak dünyaya e-posta gönderemeyebilirsiniz ve dış dünyadan e-posta kesinlikle makinenize gelemeyebilir.

8
Warren Young

Varsayılan cron yapılandırması size programınızın çıktısını içeren bir posta gönderir. Bu başarısız olursa, başarısız programınızı, programın başarısız olmamasını sağlayan bir Shell betiğine sarmayı deneyebilir ve çıktıyı daha fazla günlüğe kaydedebilirsiniz.

Bu, bazı cron uygulamalarında yapılandırılabilir bir ayardır.

8
miguel.de.icaza

Cron temel bilgileri /var/log/messages, ancak herhangi bir program çıktısını çağıran kullanıcıya gönderir.

5
Hemant

Birkaç yıl önce aynı sorunları yaşadığım için bu konuya rastladım ve yakın zamanda Ricardo'nun yukarıda belirtilen vakalarına bir çözüm buldum. Bir e-postanın eksikliğini tespit etmek zordur (belirttiğiniz gibi) ve kesinlikle kök @ şirket e-postanızı spam etmek istemezsiniz. Eğer ilgileniyorsanız kontrol deadmanssnitch.com. . Bu araç, yukarıda belirtilen durumları çözmektedir. Kullanımı oldukça basit görünüyor - sadece aracın cronjob'ınıza verdiği kodu biraz ekleyin. İşiniz belirli bir dahili çalışmada çalışmazsa, uyarılırsınız. Eğer işiniz tekrar çalışmaya başlarsa uyarı alırsınız.

2
ss_jt

vixie-cron Kullanıyorum, bu yüzden bunun her şey için geçerli olup olmadığını bilmiyorum. Ama işin tüm çıktısını içeren bir dead.letter Dosyası var.

/root/ Klasörümde crons.cron Çalıştırarak crontab olarak ayarladığım crontab /root/crons.cron Var. dead.letter, /root/ 'Da da oluşturulacak.

Düzenle Ben sadece dead.letter Google’ı seçtim ve teslim edilemeyen bir posta. Görünüşe göre cron ile ilgisi yok. Postaları doğru bir şekilde kurmadıysanız (benim gibi), dosyaya sahip olursunuz.

1
jonescb

Başka bir yararlı numara, hangi komut dosyalarının gerçekten yürütüldüğünü görmektir.

Bu run-parts -v --test /etc/cron.hourly/

> /etc/cron.hourly//logrotate

Betiğiniz görünmezse yürütülmez.

Bu btw yalnızca /etc/cron.hourly dizini. crontab öğenizde ayarlanmış öğeleri göstermez.

1
RickyA

Yeni başlayanlar için, bu hata ayıklamak için bir acı olabilir. Dakika ve saat değerlerini değiştirmediğinizden emin olun. Dakika önce gelir, sonra saat. Her biri için 12'den daha düşük değerler sağladığınızda, bunlar kabul edilir ancak beklendiği gibi veya hiç çalışmayabilir.

0
Michael Woyo