Vraag "(CRON) info (Geen MTA geïnstalleerd, weggooien van uitvoer)" fout in de syslog


Ik heb een nieuwe installatie van Ubuntu 12.04.1 LTS en een aantal servers.

Ik heb geen cron-taken toegevoegd of mijn crontab op die servers bewerkt, maar voor elke machine krijgt ik rond dezelfde tijd een 75% CPU-piek en de volgende informatie in mijn syslog op het moment van de piek:

CRON[8380]: (CRON) info (No MTA installed, discarding output)

Ik ben mono-compleet geïnstalleerd en heb een servicestacks webserver.

Wat is de beste manier om dit te voorkomen? Ik zou graag de CPU-spike willen verwijderen.


146
2017-11-27 10:25


oorsprong


Elke dag om 6:25? Dat zijn scripts van /etc/cron.daily/. Ik heb er maar één die e-mail probeert te verzenden: populariteitswedstrijd. Kijk door je scripts en zie welk script e-mail probeert te verzenden? Dat zou het moeten beperken. Vervolgens 'chmod 0644 /etc/cron.daily/script -name' om uitvoering te voorkomen.


antwoorden:


Linux gebruikt e-mail voor het verzenden van meldingen naar de gebruiker. De meeste Linux-distributies hebben een e-mailservice (inclusief een MTA) geïnstalleerd. Ubuntu doet dat echter niet.

U kunt bijvoorbeeld een e-mailservice of een postfix installeren om dit probleem op te lossen.

sudo apt-get install postfix

Of je kunt het negeren. Ik denk niet dat het onvermogen van cron om berichten te verzenden iets te maken heeft met de CPU-piek (die is gekoppeld aan de onderliggende taak die cron uitvoert). Het is misschien het veiligst om een ​​MTA te installeren en vervolgens de berichten te lezen (mutt is een goede systeemmaillezer).


139
2018-01-01 08:56



Is postfix een goede zaak om te installeren? Welke MTA is het gemakkelijkst te gebruiken? - endolith
postfix is ​​de meest gebruikte mailserver voor linux, hou je eraan - Rápli András
Het is de moeite waard om erop te wijzen dat voor gebruik met cron (dat wil zeggen als u niet echt e-mail naar buiten wilt sturen) tijdens de installatieprocedure u moet antwoorden om te configureren voor alleen lokaal gebruik. - steffen


Dit gebeurt omdat uw cron-taken uitvoer produceren en vervolgens probeert de cron-daemon die uitvoer naar u te e-mailen (dat wil zeggen root). Als u deze uitvoer niet nodig hebt, is de eenvoudigste manier om dit op te lossen het weggooien van de uitvoer in de crontab:

sudo crontab -e

en voeg toe >/dev/null 2>&1 voor elke klus:

* * * * * yourCommand >/dev/null 2>&1

63
2018-04-26 10:27



Het probleem met deze aanpak is dat dit niet het hoge CPU-gebruik verklaart. Cron probeert duidelijk communicatief te zijn en dit negeert in feite gewoon de output. Ik zou eerder geneigd zijn om de uitvoer af te handelen dan deze weg te gooien, voor het geval er nuttige foutopsporingsinformatie is. - Oli♦
Oli, ook al is dit een oude vraag, ik ervaar precies hetzelfde probleem maar het is op Raspberry PI. Ik zie een heleboel No MTA installed, discarding output bericht in het log en mijn programma stopt uiteindelijk alleen. Ik geloof dat het komt door CPU spike. Het lijkt erop dat het antwoord op deze vraag lijkt te negeren. - ThN
Om de uitvoer te behouden, plaats je het commando in een script en pip je stdout en stderr naar logger. Bijvoorbeeld, yourCommand >/dev/null 2>&1 | logger -t mycmd. Dit zorgt ervoor dat de uitvoer in syslog bewaard blijft en houdt de MTA-klachten tegen. - CivMeierFan


In mijn geval leek het bericht op een machtigingsprobleem met het bash-script, maar ik kon het pas zien toen ik een MTA installeerde.

Zoals gesuggereerd liep ik:

sudo aptitude install postfix

Ik koos "Lokaal" tijdens de installatie en na het opnieuw uitvoeren van de cron-taak:

sudo tail -f /var/mail/<user>

In mijn geval heb ik vervangen

<user>

met "root".

Ik kon toen de foutenoutput zien met betrekking tot toestemmingen.


41
2017-07-10 14:28



Bedankt voor de extra opmerking over hoe je de mailbox kunt controleren om fouten uit de taak te zien! - Stuart Allen


Voeg in crontab dit als eerste regel toe:

MAILTO=""

Dit voorkomt dat cron probeert een e-mail te verzenden.


20
2017-08-27 13:06



Plaats geen opmerkingen (#) na MAILTO="" of het zal niet werken - SBF


Als u geen MTA wilt installeren (waar ik op dit moment geen behoefte aan heb), kunt u de resultaten van de cron-taak naar een logbestand leiden.

sudo crontab -e

dan zou je met je cron-baan er zo uitzien.

0 3 * * * /cmd/to/run >> /var/log/somelogfile.log

dan kun je gewoon de boomstructuur afwerken en kijken wat er is gebeurd

sudo tail -f -n 50 /var/log/somelogfile.log

Dit is wat ik heb gedaan op elke server die ik zie in syslog


19
2018-04-17 19:37



Ik heb dit gedaan, maar er is geen registratie toegevoegd aan het bestand. - pir
Weet je zeker dat de cron-taak is uitgevoerd? - Andrew MacNaughton
Ja, het systeemlogboek laat zien dat het wordt gestart. - pir
Je hebt '2> & 1' aan het einde van de regel nodig om de uitvoer naar stderr in het bestand te vangen. - MattSmith


Zoals vermeld in een eerder antwoord, dit gebeurt omdat je cron-taken output produceren, en vervolgens probeert de cron-daemon die uitvoer naar u te e-mailen. Als je geen MTA wilt of kan installeren, maar je wilt de uitvoer zien, u kunt de uitvoer van de cron-taak doorsturen naar een logbestand. Bewerk uw crontab-bestand met

crontab -e

(gebruik sudo als het probleem met root's crontab is) en voeg toe >> / Some / log / file 2>&1 na elke opdracht, zoals deze:

0 3 * * * cmd  >> / Some / log / file 2> & 1

Als er meerdere opdrachten op een regel zijn, gescheiden door ;, &&of ||, je zou het bovenstaande moeten doen voor elke opdracht, zoals deze:

0 3 * * * cmd1  >> / Some / log / file 2> & 1; cmd2  >> / Some / log / file 2> & 1

of groepeer ze, zoals dit:

0 3 * * * (cmd1; cmd2)  >> / Some / log / file 2> & 1

Als je stdout wilt negeren en alleen stderr wilt vastleggen, gebruik > /dev/null 2>> / Some / log / filein plaats daarvan. Plaats het logbestand waar u maar wilt - uw homedirectory /var/log, of zelfs /tmp als je zeker weet dat je het niet hoeft te houden.

Kijk vervolgens naar het logbestand nadat de taak is uitgevoerd.


13
2017-07-29 02:40





Een neveneffect van toevoegen /dev/null 2>&1 aan de opdracht cron job, is dat het beide weggooit STDERR en STDOUT (Standaardfout en uitvoer). Dit werkt goed als je geen e-mails van cron wilt ontvangen. Maar als u wilt dat uw fouten per e-mail naar u worden verzonden, gebruik dan >/dev/null in plaats daarvan. Lees deze blogpost voor meer uitleg.

U moet echter nog steeds een MTA (Message Transfer Agent) installeren om de fout-e-mails te verzenden. Postfix is ​​eenvoudig genoeg om te installeren met: sudo apt-get install postfix


10
2017-12-30 17:27



Voor zover ik begreep '> / dev / null' zal ze alleen verzenden, en '> / dev / null 2> & 1' zal alle fouten verwijderen? Wat zou ik moeten gebruiken om fouten in het logboek te krijgen, maar geen e-mails? Ik krijg nu geen e-mails (zoals ik het wil) maar de lelijke 'nee MTA ...' - Pit
afaik, er is geen manier om de uitvoer te loggen, behalve om deze naar e-mails te sturen. Het dichtstbijzijnde wat u kunt doen is postfix instellen voor lokale e-mailbezorging (als u 'sudo apt-get install postfix' uitvoert, wordt u gevraagd of u lokale bezorging wilt instellen. Hoewel dit in eerste instantie als pijn leek, werkt het in feite veel beter. Wanneer ik via ssh inlog, zie ik een nieuwe e-mail op de machine als een vorige taak is mislukt. Ik vind het handiger dan het logboek te moeten controleren. - paneer_tikka
Ik denk dat dit ok kan zijn voor mij. Bedankt - Pit


Dit is een oude vraag maar er is een extra antwoord dat in sommige omstandigheden nuttig is.

Leid de uitvoer van uw cron-commando door logger dus ze komen in de syslog terecht.

Het is iets eenvoudiger dan het installeren van postfix, en het plaatst deze uitvoer in syslog naast je andere logs. Deze opdracht zal stdout AND stderr vastleggen, zodat je de No MTA installed bericht en je zult al je output zien in de syslog.

Voorbeeld cron-invoer:

0 3 * * * (cmd1;  cmd2) 2>&1 | logger -t mycmd

U kunt logboeken met uw tag bekijken mycmd gebruik makend van:

grep 'mycmd' /var/log/syslog

8
2017-10-22 22:44



Werken leidingen in cron-banen? - CivMeierFan