Czy cron może domyślnie zapisywać dane wyjściowe zadania w dzienniku * (zamiast poczty)?

23

Wszyscy wiemy, że właściwym sposobem obsługi danych wyjściowych z zadań cron jest przekierowanie ich do pliku:

0 * * * * /bin/date >> /var/log/date.log 2>&1

Czasami jednak administratorzy są leniwi, zapominający lub ignoranccy i nie umieszczają tych przekierowań; w takim przypadku dane wyjściowe zadania są wysyłane do $ MAILTO lub właściciela lub użytkownika root. W niektórych zarządzanych przeze mnie skrzynkach poczta jest wyłączona, więc dane wyjściowe trafiają do czarnej dziury. Zastanawiam się, czy jest jakiś sposób, aby powiedzieć cronowi, aby wziął jakikolwiek wynik zadania i zamiast wysłać go pocztą, wrzuć go do pliku dziennika catch-all? Używam Ubuntu (8.04, ale migruję do 9.04). W tym losowym wyniku Google jest wskazówka takiego rozwiązania , ale myślę, że OP mógł się mylić co do wydajności crona w porównaniu z wydajnością zadań crona.

Jestem otwarty na rozwiązania, które wymagają trochę skryptowania lub hakowania, ale idealnie byłby to bit konfiguracji, który mógłbym gdzieś ustawić. Nie widzę żadnych wskazówek man cron. Dzięki!

Ćwiek
źródło

Odpowiedzi:

1

W przypadku croniecrona (który jest zalecany na przykład w Gentoo Handbook), do wywołania cron jest argument „-s”, który wysyła dane wyjściowe zadania do dziennika systemowego za pomocą syslog.

Tomáš Diviš
źródło
3

Krótka odpowiedź brzmi: nie, maile od crona do właściciela crontab z założenia. W standardowym cronie nie ma sposobu, aby to zmienić.

Najlepsze, co mogę wymyślić, to skonfigurować MTA na komputerach, na których chcesz, aby to zachowanie zrzuciło pocztę do pliku dziennika zamiast skrzynki pocztowej użytkownika.

Kamil Kisiel
źródło
3

Nie jestem pewien, co dokładnie masz na myśli, mówiąc „poczta jest wyłączona”. Ale może mógłbyś ustawić alias /etc/aliasesskierowany do potoku? Coś jak

root: "|/bin/cat >> /var/log/cron.log"
innaM
źródło
root: /var/log/cron.lognie działa? feep.net/sendmail/tutorial/intro/aliases.html
endolit
Nic też dla mnie nie robi.
endolith
Mogą one działać tylko wtedy, gdy używasz sendmaila jako swojego MTA. To staje się coraz mniej powszechne. (Tak, wiem, że odpowiadam na 5-letni komentarz!)
Alex L
2

Nie sądzę, że to, o co prosisz, jest w rzeczywistości możliwe z Ubronu (lub jakimkolwiek innym) cronem.

Oprócz pomysłu geekmonkeys, możesz także ustawić $ MAILTO na konto lokalne i kierować wyjście przez procmail.

Adam
źródło
1

Nigdy nie słyszałem o takim ustawieniu dla crona, więc wybrałbym drogę skryptową.

Utwórz zadanie cron do patrolowania / var / spool / cron / * i dołącz przekierowanie do każdego zadania, które go nie ma.

geekmonkey
źródło
1

Inną opcją byłoby utworzenie skryptu powłoki o nazwie cron_wrapper lub coś takiego, i zrobienie czegoś takiego:

#! / bin / sh

eval „$ * >> /var/log/cronlog.log”
wyjść $?

Następnie wszystkie twoje crontabs potrzebują czegoś takiego:

* * * * * / usr / local / bin / cron_wrapper echo hello

Uwaga: Nie testowałem tego kodu, to tylko pomysł.

Justin Ellison
źródło
1
To nie rozwiązuje problemu. Jeśli ludzie nie pamiętają, aby ustawić MAILTO lub przekierować standardowe wyjście do pliku, nie będą pamiętać, aby uruchamiać rzeczy przez opakowanie.
Kamil Kisiel,
1

Nie wiem, co to jest „standardowy cron”. Istnieje wiele demonów cron, różne dystrybucje używają różnych. Vixie cron jest najczęściej wdrażany, więc prawdopodobnie o to ci chodziło. Ale w niektórych dystrybucjach nie byłby domyślny.

Przejęłem rozwój cron Dillona (dcron), który jest domyślny w Arch Linux. Inne dystrybucje też go używają, ale nie wiem, czy jest to domyślna nigdzie indziej. dcron ma opcję wywołania, -Mktóra określa, że ​​chcesz użyć niestandardowego skryptu zamiast sendmaila. Skrypt jest wywoływany bez argumentów, z kilkoma nagłówkami wiadomości e-mail i danymi &>wyjściowymi wszystkich cronjobs jako stdin. (Jeśli nie ma &>danych wyjściowych, skrypt nie jest wywoływany).

dubiousjim
źródło
1

dlaczego nie ustawimy MAILTO = "" w konkretnym pliku crontab użytkownika. Spowoduje to wyłączenie rejestrowania wiadomości e-mail w / var / spool / mail /

lalit
źródło