Mam nową instalację systemu Ubuntu 12.04.1 LTS i wielu serwerów.
Nie dodałem żadnych zadań cron ani nie edytowałem mojego crontab na tych serwerach, jednak mniej więcej w tym samym czasie dla każdej maszyny dostaję 75% skok procesora i następujące informacje w moim dzienniku systemowym w momencie wzrostu:
CRON[8380]: (CRON) info (No MTA installed, discarding output)
Mam zainstalowany mono-complete i uruchamiam serwer internetowy stosu usług.
Jaki jest najlepszy sposób, aby temu zapobiec? Chciałbym móc usunąć skok CPU.
Odpowiedzi:
Linux używa poczty do wysyłania powiadomień do użytkownika. Większość dystrybucji Linuksa ma zainstalowaną usługę pocztową (w tym MTA). Ubuntu nie.
Możesz zainstalować usługę pocztową, na przykład postfiks, aby rozwiązać ten problem.
Lub możesz to zignorować. Nie sądzę, że niemożność cron do wysyłania wiadomości ma coś wspólnego ze skokiem procesora (jest to związane z podstawowym zadaniem wykonywanym przez cron). Najbezpieczniej jest zainstalować MTA, a następnie przeczytać wiadomości (
mutt
jest to dobry czytnik poczty systemowej).źródło
mail
dostarczane przezmailutils
(Debian), jeśli istnieje lepszy sposób wbudowane w Postfix?Dzieje się tak, ponieważ Twoje zadania cron generują dane wyjściowe, a następnie demon cron próbuje wysłać je pocztą e-mail (tj. Root). Jeśli nie potrzebujesz tego wyjścia, najłatwiejszym sposobem rozwiązania tego jest odrzucenie go na crontabie:
i dodaj
>/dev/null 2>&1
do każdej pracy:źródło
No MTA installed, discarding output
w dzienniku kilka wiadomości, a mój program ostatecznie przestaje działać samodzielnie. Wydaje mi się, że dzieje się tak ze względu na skok CPU. Wygląda na to, że wszystkie odpowiedzi na to pytanie wydają się to ignorować.logger
. Na przykładyourCommand >/dev/null 2>&1 | logger -t mycmd
. Spowoduje to umieszczenie danych wyjściowych w syslog w celu bezpiecznego przechowywania i zatrzymanie skarg MTA.W moim przypadku wiadomość wskazywała na problem z uprawnieniami w skrypcie bash, ale nie widziałem go, dopóki nie zainstalowałem MTA.
Zgodnie z sugestią uruchomiłem:
Wybrałem „Lokalny” podczas instalacji i po ponownym uruchomieniu zadania cron:
W moim przypadku wymieniłem
z „rootem”.
Byłem wtedy w stanie zobaczyć wynik błędu związany z uprawnieniami.
źródło
Jak stwierdzono we wcześniejszej odpowiedzi, dzieje się tak, ponieważ zadania cron generują dane wyjściowe, a następnie demon cron próbuje wysłać je pocztą e-mail. Jeśli nie chcesz (lub nie możesz) zainstalować MTA, ale chcesz zobaczyć dane wyjściowe, możesz przekierować dane wyjściowe zadania cron do pliku dziennika. Edytuj plik crontab za pomocą
(użyj,
sudo
jeśli problem dotyczy crontab roota) i dodaj po każdym poleceniu, tak jak poniżej:>> /some/log/file 2>&1
Jeśli w wierszu znajduje się wiele poleceń, oddzielonych przez
;
,&&
lub||
, należy wykonać powyższe czynności dla każdego polecenia, w następujący sposób:lub zgrupuj je w następujący sposób:
Jeśli chcesz zignorować stdout i przechwycić tylko stderr, użyj zamiast tego. Umieść plik dziennika w dowolnym miejscu - w katalogu domowym , a nawet jeśli masz pewność, że nie będziesz go przechowywać.
> /dev/null 2>> /some/log/file
/var/log
/tmp
Następnie spójrz na plik dziennika po uruchomieniu zadania.
źródło
W crontab dodaj to jako pierwszy wiersz:
Zapobiegnie to próbom wysłania wiadomości e-mail przez crona.
źródło
#
) później,MAILTO=""
bo to nie zadziałaJeśli nie chcesz instalować MTA (co obecnie nie jest mi potrzebne), możesz przesłać wyniki zadania cron do pliku dziennika.
wtedy z twoją pracą crona wyglądałoby to tak.
możesz po prostu ogonić dziennik i zobaczyć, co się stało
To właśnie robiłem na każdym serwerze, na którym widzę tę wiadomość w syslog
źródło
To stare pytanie, ale istnieje dodatkowa odpowiedź, która jest przydatna w niektórych okolicznościach.
Przeprowadź wyjście polecenia cron,
logger
aby znalazły się w syslog.Jest to nieco łatwiejsze niż instalacja postfiksa i umieszcza to wyjście w syslog obok innych dzienników. To polecenie przechwytuje stdout AND stderr, więc nie zobaczysz
No MTA installed
komunikatu i zobaczysz wszystkie wyniki w syslog.Przykładowy wpis cron:
Możesz przeglądać dzienniki za pomocą swojego tagu,
mycmd
używając:źródło
Jedna strona efekt dodawania
/dev/null 2>&1
do komendy crona jest to, że zarówno odrzucićSTDERR
iSTDOUT
(błąd standardowy, jak i wyjście). Działa to dobrze, jeśli nie chcesz żadnych wiadomości e-mail od crona. Ale jeśli chcesz, aby Twoje błędy były wysyłane pocztą e-mail, użyj>/dev/null
zamiast tego. Przeczytaj ten post na blogu, aby uzyskać więcej wyjaśnień .Jednak nadal będziesz musiał zainstalować MTA (agent przesyłania poczty), aby wysłać e-maile o błędach. Postfix jest wystarczająco prosty do zainstalowania za pomocą:
sudo apt-get install postfix
źródło
Najpierw zainstaluj
postfix
, aby rozwiązać problemJeśli Ubuntu, możesz edytować
crontab
plikUwaga, edytuj górny plik, nie kod w pierwszym wierszu, i wpisz
Po
cron
wykonaniu dowolnego zadania otrzymasz wiadomość e-mailźródło
Możesz ustawić
MAILTO=””
zmienną na początkucrontab
pliku. Spowoduje to również wyłączenie powiadomienia e-mail. Edytuj / Otwórz swoje zadania cron:W górnej części pliku wpisz:
https://www.cyberciti.biz/faq/disable-the-mail-alert-by-crontab-command/
źródło
Miałem ten problem przy użyciu narzędzi Kitematic Docker .
Idź do pojemnika magento i kliknij
exe
.Następnie uruchomić
Dzieje się tak, jeśli próbujesz uruchomić Magento na Kitematic. Dziennik pokaże ten błąd na maszynie wirtualnej:
Przepraszam, jeśli się zgubiłeś, ale tak to działa. Gubisz się, ale po prostu poczytaj o tym, a kawałki pewnego dnia się połączą. Bądź cierpliwy.
źródło