Cron hataları nerede kaydedilir?


170

Ben kurulum Eğer cronişler yanlış onlar sessizce başarısız görünmektedir. Neyin yanlış gittiğini anlamak için nerede hata günlüğü aramalıyım?

Yanıtlar:


106

Diğerlerinin de belirttiği gibi, cronçalıştırdığı herhangi bir programın çıktısını size e-postayla gönderir (herhangi bir çıktı varsa). Dolayısıyla, herhangi bir çıktı elde etmezseniz, temel olarak üç olasılık vardır:

  1. crond programı çalıştırmak veya e-posta göndermek için bir kabuk bile başlatamadı
  2. crond çıktıyı postalamakta zorluk çekti veya posta kaybedildi.
  3. program herhangi bir çıktı üretmedi (hata mesajları dahil)

Durum 1 çok düşük bir ihtimaldir, ancak cron günlüklerinde bir şey yazılmalıdır. Cron'un kendine ait bir syslog tesisi vardır, bu nedenle /etc/syslog.conftesis mesajlarının nereye crongönderildiğini görmek için bir göz atmalısınız (veya dağıtımınızdaki eşdeğer dosya) . Popüler varış noktaları içerir /var/log/cron, /var/log/messagesve /var/log/syslog.

2. durumda, mailer daemon günlüklerinde incelemelisiniz: Cron daemon'undan gelen iletiler genellikle olduğu gibi görünür root@yourhost. MAILTO=...Crontab dosyasındaki bir satırı kullanarak cronun belirli bir adrese e-posta göndermesini sağlayabilirsiniz; Örneğin:

MAILTO=my.offsite.email@example.org
00 15 * * *  echo "Just testing if crond sends email"

3. durumda, programın gerçekten çalışıp çalışmadığını kolayca kontrol edebileceğiniz başka bir komut ekleyerek ç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, zamanına bakarak bir şeylerin gerçekten olup olmadığını kontrol edebilirsiniz /tmp/a_command_has_run.


3
Bu "e-postalar" da bir dosyaya giriyor mu? Paylaşılan web barındırma kullanıyorum ve bana e-posta göndereceklerini bilmediklerini sanmıyorum.
Nathan Long,

3
Komutun çalışıp çalışmadığını kontrol etmek için 3. durumda tavsiyeyi takdir ediyorum. Benim durumumda, cron işimi yapmıyordu çünkü yakın zamanda sunucunun saat dilimini değiştirmiştim ve uygun saat dilimindeki cron zamanlarını değerlendirmek için cron sunucusunu yeniden başlatmam gerekiyordu.
Nathan

1
Posta aktarma aracınıza bağlı olarak, teslim edilmeyen postaları dead.letterkök veya ilgili kullanıcı ana dizinde adı geçen bir dosyada da bulabilirsiniz .
Dario Seidl

43

İş çı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 belirtilen posta davranışını aşacağını, çünkü crond'un kendisi işten herhangi bir çıktı almayacağını unutmayın. Bu davranışı devam ettirmek istiyorsanız, tee (1) 'e bakmalısınız.


9
Neden >>yerine kullanmıyorsunuz >, bu nedenle her zaman günlük dosyasının üzerine yazmazsınız?
Chris

Elbette! | /usr/bin/loggerStefan tarafından akıllıca önerildiği gibi , herhangi bir G / Ç yönlendirmesi, isteseniz bile yapar .
Zehirini

cron bu günlük dosyasını myjob.logbeklendiği gibi 0 boyutta oluşturmuş, ancak başka bir dosyaya giriş yapmış, bu ayarı nerede değiştirebilirim?
Muhasebeci,

42

E-postaları göremiyorsanız, şirketinizin @@ @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@- Postaları göremiyorsanız, şirketinizin @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@- Postaları göremiyorsanız, şirketinizin @@ @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@- Postaları göremiyorsanız, şirketinizin @@ @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@- Postaları göremiyorsanız, şirketinizin @@ @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@- Postaları görmüyorsanız, bu hesabı izlemek için kullanan kişilere oldukça can sıkıcı olabilecek hatalarla, şirketinizin kökünü @ spam. Bunun yerine çıktıyı Syslog'a göndermeyi deneyin:

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

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

Bu, "yourcronjob: command not found" gibi yalnızca 1-2 satır uzunluğundaki hata mesajları için harikadır. Ayrıca mevcut syslog altyapınızı kullanır (Logrotation, merkezi syslogging, Splunk, vb.) Ayrıca e-posta spam'lerini kökünden azaltır.

Cronjob'ınız yüzlerce çıktı satırı oluşturuyorsa, bu iyi bir çözüm olmayabilir.


8

Varsayılan cron yapılandırması size programınızın çıktısını içeren bir posta gönderecektir. Bu başarısız olursa, başarısız olan programınızı, programın çalışmamasını sağlayan bir kabuk 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.


7

crondİşin yürütülememesi veya işin sıfır olmayan bir çıkış kodu döndürmesi durumunda e-posta almanız gerekir . Yazmayı deneyin:

$ mailx

komut isteminde.

mailx(1)Unixlike sistemlerin çoğunda temel posta okuma programıdır. Modern standartlara göre çok ilkel, ancak her zaman kullanılabilir olması için hemen hemen güvenebilirsiniz. Diğer, daha iyi posta ajanları mevcut olabilir, ancak kullanmakta olduğunuz rastgele bir makinede hangisinin yüklü olduğunu asla bilmediğiniz kadarı vardır.

Sisteminizi Internet 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ılardan e-posta gönderebilir ve alabilirsiniz, ancak dünyaya e-posta gönderemeyebilirsiniz ve dış dünyadan e-posta göndermeniz kesinlikle makinenize gelemez.


5

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


Hiçbir var /var/log/messagesbenim Ubuntu sunucuda ( 4.4.0-128-generic #154-Ubuntu SMP). Neden bir fikrin var mı? Ben rootaylardır crontab içinde tanımlanmış birkaç tane cron işim vardı (örneğin apt autoremove), ancak hiçbiri idam edilmemiş gibi görünüyor.
Dan Dascalescu

2

Birkaç yıl önce aynı sorunları yaşayarak bu konuya rastladım ve yakın zamanda Ricardo'nun yukarıda belirtilen davalara bir çözüm buldum. Bir e-postanın eksikliğini tespit etmek zordur (dediğiniz gibi) ve kök e-postanızı e-postanızda kesinlikle spam yapmak istemezsiniz. İlgileniyorsanız deadmanssnitch.com adresini ziyaret edin . . Bu araç yukarıda belirtilen davaları çözmektedir. Kullanımı oldukça basit gözüküyor - sadece aracın size bahşedeceğiniz kodları ekleyin. İşiniz belirli bir dahili alanda çalışamazsa, uyarılırsınız. İşiniz tekrar çalışmaya başlarsa, siz de uyarılırsınız.


1

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

Benim içinde /root/klasörün ben var crons.cronben çalıştırarak benim crontab olarak ayarladığınız crontab /root/crons.cron. dead.letterde yaratılacak /root/.

Düzenle Ben sadece Google’dı dead.letterve teslim edilemeyen bir posta. Görünüşe göre cron ile ilgisi yok. Doğru şekilde ayarlanmış bir postaya sahip değilseniz (benim gibi), dosyaya sahip olacaksınız.


0

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


2
Haklısın, ama bunun gerçekten soruyu cevapladığından emin değilim.
roaima
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.