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


45

Çalıştırılabilir dosyalardan birine yerleştirerek Ubuntu'da cron işleri oluşturuyorum /etc/cron.{daily,hourly,monthly,weekly}. Cron ile başlayan çok sayıda dizin var:

kent@rat:~$ 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

Ne zaman komut dosyalarımdan e-posta almak istiyorum:

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

Ben SSMTP yüklü ve işçi, ben Google-hesabından benim posta göndermek. 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 cron işleri ekleyemiyor.

Senaryolardan gelen e-postanın genel olarak Linux / Unix'te ve özellikle de Ubuntu'da nasıl çalıştığını bilmek istiyorum. Ayrıca yukarıdaki iki durumda da posta almamın iyi bir yolunu bilmek isterim.

Yanıtlar:


60

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

Sistem geneli crontab, / etc / crontab içindedir, `root 'kullanıcısı altında çalışır.

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

Bunu yapılandırmanın normal yolu, kökün sistemdeki başka bir kullanıcıya takma işlemi yapmasıdır, örneğin, benim için 'root' kelimesini 'phil' (kullanıcı hesabım) ve alias 'phil' kelimesini dış e-posta adresime takas ediyorum.

Çıktıda size e-postayla gönderilmesini istediğiniz belirli bir kullanıcı kronunuz varsa, kullanıcıyı başka bir e-posta adresine yönlendirmek için tekrar / etc / aliases komutunu kullanabilirsiniz (süper kullanıcı erişiminiz vardır) veya aşağıdakileri kullanabilirsiniz. crontab'ın üstü:

MAILTO="email@domain.com"

Postanın yerel bir kullanıcıya gönderilmesi gerekiyorsa, bunun yerine sadece 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

Olmadınız /etc/aliasesizleyin gerekiyordu girişlerinin biçimi name: value1, value2, ... ? Bilmiyorum, belki de format son 8 yılda bir noktada değişti.
Nathan Jones

1
"benim için 'root' yerine 'phil' (kullanıcı hesabım) ve alias 'phil' i dış e-posta adresime takas ediyorum." 'Phil' harici bir e-posta adresine nasıl adlandırılır?
Howard Lee,

29

Vixie cron'dan e-posta göndermek için sendmail komutunu kopyalayan bir şeye ihtiyacınız olacaktır. Yani postfix veya SSMTP kurmak bu kısmı çözecektir. Kullandığınız postfix ise 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 = "foo@bar.com" eklenmesi, cron işinden herhangi bir çıktının e-postayla gönderilmesine neden olacaktır. Bu, hata kodundan bağımsızdır.

Hataları doğru şekilde STDERR'ye çıkaran komut dosyaları için, sonra yalnızca hatalı olduklarında e-postayla göndermek kolaydır:

MAILTO="foo@bar.com"
0 5 * * * /bin/some_script > /dev/null

Bu sadece STDOUT'u null değerine yönlendirir. Herhangi bir STDERR mesajı mevcutsa size e-posta gönderilecektir.

Ancak, bazı komut dosyalarının STDOUT gibi yanlış çıktı vereceğini ve çıkış kodunu 1 olarak ayarladığını gördüm. Çıktıyı bunlardan almak için bir yol bulamadım, ancak çıkış kodu 0 ise çıktıyı yoksay. Çıkışı bir dosyaya yönlendirmek, çıkış kodu 0 değilse, cron'un yakalayabileceği bir dosya olduğunu düşünebilirim. Yine de oldukça korkunç görünüyor.


3
Deneyebilir misiniz habilis.net/cronic
dfrankow

8

Tüm çıktıları (stdout ve stderr) belirli bir adrese göndermek istiyorsanız, MAILTOdeğişkeni kullanabilirsiniz . Örneğin, aşağıdakileri komut dosyasının en üstüne yerleştirin.

MAILTO="address@example.com"

5

/ etc / aliases dizinine "root: your@email.address" eklemeyi deneyin

bu kullanıcı için tüm mesajları e-postanıza gönderir. Tüm mesajları istemiyorsanız, özellikle bunun için bir kullanıcı oluşturabilirsiniz.

Senaryo bir şey çıktığı sürece, bir posta alacaksın.



2

SSMTP'nin yapmanız gerekenlere bağlı olduğunu sanmıyorum. Cron işlemlerinden postayı "alabilen" bir şeye ihtiyacınız var ve sonra gerçek posta kutunuza gönderin.

Sendmail kullanıyorum, çünkü yaşlı bir Sun eli olduğum için; Postfix'i kullanan bu günlerde tüm harika çocuklar tarafından güldüğünü biliyorum. Ubuntu topluluğunuz posta sisteminizi kurmada size rehberlik eder.


ssmtp uygular / bin / sendmail
bobpaul

2

Alternatif olarak - Tüm kök postaları bazı dosyalara arşivlerim ve ardından orijinal postayı silerim.

Ben bir komut dosyası cron ((burada ö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 bir e-posta dosyasını harici bir e-posta kimliğine vb. Gönderebilirim ...

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.