Vraag Is er een goede manier om logboeken te wissen?


Ik vroeg me af of er een goede manier was om logboeken in het algemeen te wissen?

Ik ben onbekend met Ubuntu en ik probeer Postfix op te zetten. De inlogvraag is /var/log/mail.log. Ik vroeg me af of er een juiste manier was om het te verwijderen, in plaats van dat ik erin ging en alle regels wist en opsloeg. Ik merk dat er soms geen fouten worden geschreven direct nadat ik het log heb gewist en bewaard.

Kanttekening: ik heb problemen met het instellen van Postfix en probeer het voor mij gemakkelijker te maken om de logboeken te lezen in de hoop dat dit me kan helpen, in plaats van helemaal naar beneden te moeten scrollen.


54
2018-06-30 16:13


oorsprong


als je alleen maar het einde van het bestand wilt zien staart is jouw vriend. tail /var/log/mail.log om de laatste 5 regels weer te geven. tail -f /var/log/mail.log om alle regels te zien die aan het einde van het bestand zijn geschreven. - Iain
serverfault.com/questions/285843/... - poige


antwoorden:


Je kunt gebruiken:

> /var/log/mail.log

Dat zal het log afbreken zonder dat u het bestand hoeft te bewerken. Het is ook een betrouwbare manier om de ruimte terug te krijgen. Soms maken mensen de fout om rm in het logboek te gebruiken en vervolgens de bestandsnaam opnieuw te maken, als een ander proces het bestand openzet, krijg je de ruimte niet terug totdat dat proces de hendel ervan sluit en je de rechten kunt verknoeien.

Ook als u de inhoud van het logboek bekijkt, wilt u misschien de tail commando:

tail -f /var/log/mail.log

Ctrl-C breekt de staart af.


67
2018-06-30 16:20



/bin/csh (gebruikelijk voor FreeBSD) zou dit met "ongeldig nulcommando" tussentijds kunnen redden zsh (populaire vervanging voor bash) zou EOF wachten. Zien serverfault.com/a/381380/67675 - poige


Ja, er is een goede manier: dat doe je niet duidelijk logs helemaal. U draaien hen. Rotatie omvat het schakelen van loguitvoer naar een nieuw bestand onder dezelfde naam, waarbij de vorige N logbestanden worden bewaard onder een set van N gerelateerde bestandsnamen.

Hoe men logs draait hangt af van hoe iemand ze in de eerste plaats schrijft.  Dit is een vaak vergeten punt. Sommige van de antwoorden raken hier althans aan, met de opmerking dat sommige logprogramma's een open bestandsbeschrijver houden voor het logbestand, dus alleen het verwijderen van het bestand zal de ruimte niet vrijmaken, of zelfs de uitvoer naar een nieuw logbestand veranderen.

Als het programma dat het logbestand schrijft, is multilog van de daemontools pakket, bijvoorbeeld, dan doe je helemaal niets om de logs te roteren - geen handmatige scripts, nee cron banen. Vertel het gewoon multilog die loguitvoer naar een map gaat en deze zelf een automatisch geroteerde en van een afmeting voorziene set van N logbestanden in die map zal handhaven.

Als het programma dat de logbestanden schrijft, is svlogd van de runit pakket, voor een ander voorbeeld is dan hetzelfde van toepassing. U doet helemaal niets anders dan de tool in een directory. Het zal zelf een automatisch geroteerde en afgetopte set N log-bestanden in die map bijhouden.

Als je gebruikt rsyslog om logbestanden te schrijven, dan het logboekprogramma kan worden verteld om te stoppen nadat het logbestand een bepaalde grootte heeft bereikt en een script uit te voeren. Je moet het vlees van het script schrijven, om het logbestand daadwerkelijk te hernoemen en oude logbestanden te verwijderen op basis van de beperkingen van de totale grootte, maar in ieder geval heeft het logboekprogramma het bestand gesloten en de logboekschrijver gepauzeerd terwijl dit gebeurt.

De oude syslogd manier om boomstammen te roteren, nog steeds verwacht door logboekregistratieprogramma's zoals syslog-ng en zoals geïllustreerd door tools zoals logrotategenoemd door djangofan in een ander antwoord hier, is iets meer lukraak. De ene runt een cron taak die de logboekbestanden periodiek hernoemt en de logging-daemon opnieuw start (met behulp van elke daemon-supervisor waar het onder draait). Het probleem met dit is natuurlijk dat het geen afmeting van de algehele maat afdwingt. Op trage weken kan men N zeer kleine logbestanden per dag krijgen, terwijl je op drukke dagen 1 heel groot logbestand kunt krijgen dat ruim boven de limiet zit.

Dit is de reden waarom latere en betere tools zoals multilog en svlogd configuratieopties voor bestandsgroottes hebben en natuurlijk de logbestandsgroottes zelf controleren. De wereld heeft geleerd dat het afvragen van de logs volgens een schema met cron banen, of zelfs een logrotate daemon, laat vensters staan ​​waarvan de grootte niet klopt, en dat de juiste plaats is om deze controles te hebben, en zo rigourously door de beheerder gedefinieerde maataanduidingen afdwingen zodat iemands logbestanden nooit de partitie opslingeren waarop ze zich bevinden, bevindt zich in het programma dat de bestanden feitelijk wegschrijft in de eerste plaats.


21
2017-07-01 10:58



Wat rsyslog betreft, het kan eenvoudig worden geconfigureerd om te vertrouwen op bestandsnamen die worden beschreven door een "patroon", waaronder bijvoorbeeld JAAR, MAAND en DAG. Dit is net zo eenvoudig als een template(name="DYNmail" type="string" string="/var/log/%$YEAR%/%$MONTH%/%$DAY%/mail.log") richtlijn, gevolgd door een if ($syslogfacility-text == 'mail') then -?DYNmail;TraditionalFormat. Op deze manier is log-rotatie eenvoudig een niet-probleem, tenminste als een enkel bestand per dag in orde is. Voor zeer grote volumes log (die meerdere rotaties per dag nodig hebben), is er $HOUR ook. - Damiano Verzulli


Ja, er is een tool voor Linux genoemd logrotate .


10
2018-06-30 16:36



Slechts een kleine correctie: dit is geen service, dit is een tool, meestal uitgevoerd vanuit cron-service. - rvs


Als de reden dat u het logboek leeglaat, is om ruimte vrij te maken, kunt u cat / dev / null gebruiken, zonder de programma's die erin schrijven te onderbreken. Verwijder ze nooit! sommige software kan klagen door te stoppen met werken of het loggen volledig te negeren tot de volgende herstart

cat /dev/null > /path/to/logfile

# to empty all the logs in a directory
for i in /var/log/*; do cat /dev/null > $i; done

8
2018-04-20 00:55



Om logbestanden op recursieve wijze te wissen: for i in $(find /var/log -type f); do cat /dev/null > $i; done - Iurie Malai


Je kunt dit ook gebruiken ..

truncate /opt/package/logs/*.log --size 0

Hier worden alle logbestanden in de / opt / package / logs leeg.


4
2018-06-25 05:32



Ik zie niet hoe dit beter zou kunnen zijn dan de oudere antwoorden. - kasperd
Dit is eigenlijk een heel goed antwoord, en eigenlijk de enige die direct antwoord geeft op de vraag of er een goede manier is om logbestanden af ​​te kappen. HOE het beter is dan de andere antwoorden is dat het het logbestand NIET VERWIJDERT, het de inhoud op de juiste manier nulpunt, waardoor machtigingsfouten en ontbrekende logbestanden die enige daemons tot paniek veroorzaken in dit geval niet optreden. - hmedia1


Kort en compatibel overschrijven van inhoud: : > /dest/file

Maar er is ook een truncate (2) systeemaanroep en bijbehorende gebruikersruimtetool truncate op veel * NIX'en.


3
2018-04-20 01:25





Als u het bestand wilt bewaren voordat u het opruimt, kunt u het volgende doen:

cp /var/log/mail.log /var/log/mail.log.1 && echo -n "" > /var/log/mail.log

Als u wilt zoeken naar een specifieke tekst of e-mail in het logboek, kunt u grep gebruiken. Als u afbeeldingen over e-mailgebruik wilt behouden, kunt u AWStats gebruiken.


0
2018-06-30 16:25





cat / dev / null> / pad / naar / logbestand

Werkt voor mij


0
2017-11-22 02:21





Hier is hoe ik het doe, en dit is alleen voor NGINX, je kunt dat verwijderen om het op alle logbestanden te laten werken.

# Clear nginx logs.
# @usage delnginxlogs
function delnginxlogs() {
  echo "---------------   Clearing logs... ---------------"

  # Clear logs.
  for i in /var/log/nginx/*; do cat /dev/null > $i; done

  echo "---------------   Deleting .gz log files... ---------------"

  # Delete .gz files.
  find /var/log/nginx -type f -regex ".*\.gz$" -delete

  echo "---------------  DONE: NGINX logs cleared ... ---------------"
}

0
2018-03-25 00:28