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:
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.
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
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.
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]"
/ 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.
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.
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.
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 ...