Cron işlerimin sonuçlarını nasıl görebilirim?


Yanıtlar:


66

Cron ile çalıştırdığınız programların kendi günlük dosyalarının olup olmadığını kontrol edin. Eğer çıktılarını standart çıktılara yazmazlarsa, bunları dosyalara yönlendirebilir veya size postayla gönderebilirsiniz. Crontabs içinde standart kabuk yönlendirme çalışmaları.

Örneğin hata çıkışını yönlendirmek some_job.shiçin some_job.errve (yani göndermeden standart çıktıyı atmadan /dev/nullcrontab için aşağıdaki yönlendirmeyi ekleyin)

 33 3 * * * /path/to/some_job.sh 1> /dev/null 2> /other/path/to/some_job.err

veya bunun yerine size postalamak için (varsa mail)

 33 3 * * * /path/to/some_job.sh 1> /dev/null 2>&1 | mail -s "cron output" you@example.org

Cron sorunlarımı hep böyle çözdüm.
Physicsmichael

Bu ikinci örnek doğru mu? Her şeyi yönlendirmez mi /dev/null?
Timmmm

7
@Timmmm: Çalışıyorum. İlk olarak some_job.shstdout'tan stdout'a /dev/nullve sonra stdout'a (şimdi artık hiçbir şey içermeyen) olan her şeyi yönlendirir . Bu şekilde sadece stderr stdout'ta sona erer ve geçer mail.
Benjamin Bannier

9

Platformlarda çalışan cronların çoğu crontab'ı, crontab'ı işin geldiği kullanıcıya otomatik olarak e-posta ile gönderir. Sistem genelinde ne olduğunu unuttum (/ etc / crontab'dan kullanıcıya özel olmayan cron işleri). Mesele şu ki, insanlar artık çoğu Unix benzeri işletim sistemi için bir posta gönderici (yani, sendmail, qmail veya postfix gibi bir Mail Transfer Agent) kurmazlar. Yani, cron job output e-postaları, o kadar uzakta olsalar bile, yerel posta biriktirme klasöründe ölürler . Bu nedenle, yanıtlardan biri yalnızca posta postanızın arka planını ateşe vermek olabilir ve yerel postalarınızı "gerçek" e-posta hesabınıza iletmek için bir ~ / .forward dosyanız olduğundan emin olun.

İşlerinizin belirli günlük dosyalarına yazmasını istiyorsanız, @honk önerilen ya da cron işinizin bir kabuk betiği olduğunu farz ederseniz, komut dosyası çağrı günlüğünüzün (1) veya syslog (1) veya İşletim sisteminizin syslog'a isteğe bağlı mesajlar göndermek için sağladığı diğer komut satırı aracı. Daha sonra, belki /etc/syslog.conf dosyasını düzenleyerek hangi tür iletilerin günlüğe kaydedileceğini yapılandırmak için işletim sisteminizin yerleşik yöntemlerini kullanabilirsiniz.

Cron işlerimin çoğu, özellikle cron tarafından belirli bir nedenden dolayı başlatılmak amacıyla yazdığım bash scriptlerini çağırıyor. Bunlarda, özellikle başlangıçta yazı yazıp hata ayıkladığımda, kabuk betiğinin her satırının açılmamış ve genişletilmiş biçiminin çalıştırılmadan önce stdout'a yazılmasını sağlamak için bash "set -vx" i kullanmayı seviyorum. Cron'dan başlatılan kabuk komut dosyalarının giriş yapmayan, etkileşimli olmayan kabuklar olarak kabul edildiğinden, .bashrc ve .profile gibi standart kabuk başlatma komut dosyalarınızın çalışmadığını unutmayın. Eğer bash kullanıyorsanız ve bash'ı bir başlangıç ​​betiğini çalıştırmak için istiyorsanız, crontab'ınızda işi tanımladığınız satırdan önce "BASH_ENV = / path / to / my / startup / script" ortam değişkenini tanımlamanız gerekir.


3
Doğru. Bir mailkomut satırından mesajları okumak için komut kullanabilirsiniz . Veya şuna bak /var/spool/mail. Ancak, postfix'i veya standart sendmail'den başka bir mailler yüklediyseniz, mesajları okumak için başka bir yol gerekir.
akostadinov

Neden bunun için bir posta servisine ihtiyacımız var? mail -s "cron output" test@example.comgayet iyi çalışıyor: /
Martin Konecny

CentOS'ta cron çıktım, / var / spool / mail adresine "postalanır". Çalıştırarak bunu görün less $MAILgeçerli kullanıcı için veya cron çıkışını görmek istiyorsanız less /var/spool/mail/rootroot olarak çalışan komutlar için cron çıkışını görmek istiyorsanız.
sffc

5

Cron'un yürüttüğü görevler kendi kayıtlarından sorumludur.


2

En basit yol yazdırma hatalarını yakalamak ve daha sonra bir dosyada savem etmektir. Böyle bir php komut satırı çağıran bir cronjob var:

1 0 * * * php /pathOfMyApp/index.php controllerName işleviAdı> / pathOfMyApp / log / myErrorLog 2> & 1

'>' Bölümünden önceki bölüm benim cronjob'im ve '>' bölümünden sonraki bölüm, projemin kökenindeki bir günlük klasöründe bulunan bir dosyada yakalama ve kaydetme, ancak istediğiniz yerde olabilir. Dikkatli olun: cronjob her çağrıldığında, son kütüğün üzerine yazacak. Mevcut bir dosyanın sonuna yazmak için '>>' kullanabilirsiniz veya 'cat' terminal komutunu arayın.

Eğer crontab'ınız 'curl' veya 'wget' kullanıyorsa ve bir linke başvurursanız, cron 500 veya 400 ile geri dönüyorsa, erişim günlüğü için / var / log / httpd / appName içinde arama yapabilirsiniz.

Sonunda, / var / log / mesajları da kontrol edebilirsiniz.


1

Cron dosyası içinde yönlendirmenin bu durumda en iyi seçenek olmadığını düşünüyorum.

Çoğu zaman, günlük speification'ın cron job script ile birlikte yerleştirilmesini istiyorsunuz. Bu durumda aşağıdakileri öneririm:

#!/bin/bash
exec &>> capture-log.txt
echo "Running cron-job foo at $(date)"
...
<rest of script>

Bu çıktıyı cron işinden capture-log.txt dosyasına ekler.


1

Cron işleri hakkında e-posta raporları almayı tercih ederim. Sadece koy

MAILTO=yourmail@domain.com

crontab’ın içine bir e-posta alacaksınız. Elbette hesabınız için yapılandırılmış bir e-postanız olması gerekir.


Bunu genellikle hata ayıklama için açıp kapamak için en kolay olanı buluyorum. Genellikle e-posta adresi için username @ localhost kullanıyorum.
flickerfly
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.