it-swarm.asia

Ubuntu'da (başarısız) cron işlerinden e-posta nasıl alınır?

Ubuntu'da yürütülebilir dosyaları /etc/cron.{daily,hourly,monthly,weekly}. Cron ile başlayan birçok dizin var:

[email protected]:~$ ls -ld /etc/cron*
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.d
drwxr-xr-x 2 root root 4096 2009-07-16 13:17 /etc/cron.daily
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.hourly
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.monthly
-rw-r--r-- 1 root root  724 2009-05-16 23:49 /etc/crontab
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.weekly

Aşağıdaki durumlarda scriptlerimden e-posta almak istiyorum:

  1. Bir komut dosyası başarısız olur ve sıfır olmayan bir çıkış kodu verir.
  2. Senaryoda bana söyleyecek bir şey var

SSMTP yükledim ve çalışıyor, postalarımı Google hesabımdan gönderiyorum. SSMTP'nin yalnızca bir hesap kullanarak posta gönderebilmesi benim için sorun değil. Bu sadece bir ev sunucusu ve sahip olduğum kullanıcıların cron işleri ekleyebilme yeteneği yok.

Komut dosyalarından gelen postaların genellikle Linux/Unix'te ve özellikle Ubuntu'da nasıl çalıştığını bilmek istiyorum. Ayrıca, yukarıdaki iki durumda posta almamın iyi bir yolunu bilmek istiyorum.

46
Deleted

Varsayılan olarak, cron, crontab'ın çalıştığı hesabın sahibine e-posta gönderir.

Sistem geneli crontab/etc/crontab 'dadır ve kullanıcı `root' altında çalışır

Kök yaygın olarak kullanıldığından,/etc/aliases dosyanıza zaten bir root takma adı eklemenizi öneririm. (sonra 'yeni adlandırmalar' çalıştırın)

Bunu yapılandırmanın normal yolu, kökün sistemdeki başka bir kullanıcıyla diğer adının kullanılmasıdır; benim için 'phil' (kullanıcı hesabım) 'root' ve harici e-posta adresim 'phil' takma ad olurum.

Çıktı sırasında size e-postayla gönderilmesini istediğiniz belirli bir kullanıcı cronunuz varsa, kullanıcıyı başka bir e-posta adresine yönlendirmek için/etc/aliases öğesini tekrar kullanabilirsiniz (süper kullanıcı erişiminiz varsa) veya aşağıdakileri kullanabilirsiniz: crontab'ınızın üst kısmı:

MAILTO="[email protected]"

Yerel bir kullanıcıya posta gönderilmesi gerekiyorsa, bunun yerine yalnızca kullanıcı adını girebilirsiniz:

MAILTO=someuser

Daha fazla bilgiye ihtiyacınız varsa çalıştırarak crontab (5) 'e bakınız:

man 5 crontab
62
Philip Reynolds

Vixie cron'dan gönderilen e-postaları almak için sendmail komutunu kopyalayan bir şeye ihtiyacınız olacak. Bu yüzden postfix veya SSMTP kurmak bu parçayı çözecektir. Postfix kullanıyorsanız, takma ad dosyası sistem kullanıcılarını gerçek e-posta adresleriyle eşlemek için kullanılabilir.

Bir crontab'ın üstüne MAILTO = "[email protected]" eklendiğinde, cron işinden herhangi bir çıktı e-postayla gönderilir. Bu hata kodundan bağımsızdır.

Hataları STDERR'a doğru şekilde veren komut dosyaları için, yalnızca yanlış gittiklerinde e-postayla gönderilmesi kolaydır:

MAILTO="[email protected]"
0 5 * * * /bin/some_script > /dev/null

Bu yalnızca STDOUT'u null değerine yönlendirir. Herhangi bir STDERR mesajı varsa size e-posta alacaklardır.

Ancak, bazı komut dosyaları hataları STDOUT olarak yanlış çıktı ve 1 olarak ayarlayın. Ben çıkış çıktı bu kapmak için bir yol bulmadım, ancak çıkış kodu 0 ise çıktı yoksay. Ben düşünebilirsiniz çıkış bir dosyaya yeniden yönlendirmek, sonra çıkış kodu 0 çıktı değilse cron kapmak için bu dosya. Yine de oldukça korkunç görünüyor.

29
Theozaurus

Tüm çıktıları (stdout ve stderr) belirli bir adrese göndermek istiyorsanız MAILTO değişkenini kullanabilirsiniz. Örneğin, betiğin üstüne aşağıdakileri yerleştirin.

MAILTO="[email protected]"
8
Dan Carley

/ etc/aliases dosyasına "root: [email protected]" eklemeyi deneyin

söz konusu kullanıcının tüm iletilerini e-postanıza gönderir. tüm mesajları istemiyorsanız, bunun için özel olarak bir kullanıcı oluşturabilirsiniz.

Betik bir şey çıkardığı sürece bir posta alacaksınız.

5
Daniel P

Günlük yaklaşık 20 cronjobs çalıştıran tüm yapımlarım sunucularında python-cronwrap paketi tarafından yemin ederim. Buradan kontrol edin: http://pypi.python.org/pypi/cronwrap . Yapılandırması gerçekten kolay ve hepsinden önemlisi güvenilir.

3
Low Kian Seong

SSMTP'nin yapmanız gereken şeylere bağlı olduğunu düşünmüyorum. Cron işlemlerinden "alabilecek" ve daha sonra gerçek posta kutunuza gönderebileceğiniz bir şeye ihtiyacınız vardır.

Sendmail kullanıyorum, ama bunun nedeni eski bir Sun eliyim; Bu günlerde Postfix kullanan tüm havalı çocuklar tarafından güldüğünü biliyorum. Ubuntu topluluğunuz posta sisteminizi kurma konusunda size rehberlik edebilir.

2
David Mackintosh

Alternatif - Tüm kök postaları bazı dosyalara arşivler ve sonra orijinal postayı silerim.

Ben bir script cron (işte önemli kısmı) -

#!/bin/bash
if `/usr/bin/mail -e`; then
   /usr/bin/mail --print 2>&1 > /tmp/email_${date +"%Y-%m-%d_%H.%M").log
   echo ‘d *’ | /usr/bin/mail -N > /dev/null
fi
exit 0

Bu işleri düzenli tutar ve ben de ona göz kulak olurum. Günlük posta dosyasını harici bir e-posta kimliğine e-postayla gönderebilirim, vb ...

2
irdroid3