Yanıtlar:
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.sh
için some_job.err
ve (yani göndermeden standart çıktıyı atmadan /dev/null
crontab 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
/dev/null
?
some_job.sh
stdout'tan stdout'a /dev/null
ve 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
.
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.
mail
komut 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.
mail -s "cron output" test@example.com
gayet iyi çalışıyor: /
less $MAIL
geçerli kullanıcı için veya cron çıkışını görmek istiyorsanız less /var/spool/mail/root
root olarak çalışan komutlar için cron çıkışını görmek istiyorsanız.
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.
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.
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.