/etc/cron.daily/foo: Kök yerine belirli bir kullanıcıya e-posta gönderilsin mi?


13

CentOS 5.5 kullanıyorum.

/Etc/cron.daily/ dizininde saklanan birkaç cronjobumuz var. Bu cronjobs'ların bazılarının e-postalarının belirli bir e-posta adresine gitmesini isteriz, /etc/cron.daily/ içindeki e-postaların geri kalanı varsayılan e-posta adresine (root @ localhost) gitmelidir.

/Etc/cron.daily/ içindeki cronjobs / etc / crontab dosyasından çalıştırılır. / etc / crontab bir 'MAILTO' alanını belirtir. /Etc/cron.daily/foo cronjob'ımda MAILTO ayarlayarak bunu geçersiz kılabilir miyim?

Bununla başa çıkmanın en iyi yolu nedir?


CentOS 6.5 (cronie) kullanıcıları için /etc/crontabnot : varsayılanları belirtmez.
Adam Monsen

Yanıtlar:


13

Ayar MAILTO=user@example.orgiçinde /etc/cron.daily/fooçalışma yapmaz. Komut dosyası çıktısı user@example.org adresine gönderilmez.

Http://www.unixgeeks.org/security/newbie/unix/cron-1.html adresindeki sayfa da basit bir çözüm önermektedir:

Dosya /etc/cron.daily/fooşimdi aşağıdakileri içeriyor:

#!/bin/sh
/usr/bin/script 2>&1 | mailx -s "$0" stefanl@example.org

Bu, 'stefanl@example.org' adresine, komut dosyasının tam yoluna (ör. /etc/cron.daily/foo) Eşit olan bir e-posta gönderir .

Unixgeeks.org bu konuda şöyle diyor:

Cron'dan çıktı

Daha önce de söylediğim gibi, cron çıktısı sürecin sahibine veya MAILTO değişkeninde belirtilen kişiye gönderilir, ama ya bunu istemezseniz? Çıktıyı bir başkasına postalamak istiyorsanız, çıktıyı komut postasına bağlayabilirsiniz. Örneğin

cmd | mail -s "Posta konusu" kullanıcısı

Bazen, sadece bir cronjob hatalarını almak istiyorum, stdout değil, bu yüzden bu hileyi kullanıyorum. Sözdizimi ilk bakışta yanlış görünebilir, ancak çalıştığından emin olabilirsiniz. Aşağıdaki cronjob STDOUT'u / dev / null'a gönderecek ve daha sonra STDERR'yi boru hattı üzerinden işleyecektir.

doit 2>&1 >/dev/null | mailx -s "$0" stefanl@example.org

Aynı şey, ancak syslog'a gönder:

doit 2>&1 >/dev/null | /usr/bin/logger -t $ME

Ayrıca Cronjob stderr ServerFault dosya ve e-posta için benim cevap bakın


6

Daha zarif bir çözüm /etc/cron.ddoğrudan kullanmak olacaktır . Komut dosyanızı içeri almak yerine, /etc/cron.dailybenzer bir yere koyun /usr/local/sbin/myscript.shve dosyayı /etc/cron.d/myscriptşu şekilde oluşturun:

MAILTO=root,whomever@example.org
# run myscript.sh at 4:11 every day
11 4 * * * root /usr/local/sbin/myscript.sh

Bu aynı zamanda işin ne zaman gerçekleşeceği konusunda size çok daha fazla kontrol sağlar; örneğin sadece belirli hafta içi günlerde vb. Daha crontab(5)fazla bilgi için adama bakın .


0

Bu makinede SA erişiminiz olduğunu varsayarsak, yeni bir kullanıcı hesabı oluşturabilir, görevleri bu hesapların cron görevlerine ekleyebilirsiniz. Bu kullanıcının postası daha sonra bu hesaplar ana klasöründeki bir .forward dosyası kullanılarak iletilebilir. Cron görevleri ayrıcalıklı erişim gerektiriyorsa bu kullanıcı için izinler ayarlamanız gerekebilir.

Bu ya da Stefan'ın cevabının en uygun olup olmadığı, kurulumda ne kadar güçlük çekeceğinize ve hata mesajlarının kök e-postaya mı yoksa normal olarak günlük çıktıyı izleyen kişilere mi gitmesini istediğinize bağlıdır.

İyi şanslar

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.