Kann mir jemand eine Lösung geben, um alle Protokolldateien im /var/log/
Verzeichnis abzuschneiden ?
und eine Frage nur für Wissen, ist es eine gute Idee oder nicht?
#!/bin/bash
LOGDIR="/var/log"
for logfile in $(ls $LOGDIR/*log)
do
truncate -s 0 $logfile
done
command-line
scripts
files
log
Pylover
quelle
quelle
/var/log
hier werden Nachrichten abgelegt, die Sie möglicherweise später benötigen. Ubuntu hat das Problem schon einmal angetroffen. Lesenman 8 logrotate;man logrotate.conf
.Antworten:
Versuche dies:
truncate -s 0 /var/log/*log
BEARBEITEN:
Wenn Sie dies mehrmals tun möchten, sollten
logrotate
Sie die Protokolle bearbeiten. Normalerweise ist es in Ubuntu installiert. Schauen Sie sich das anman logrotate
(oder wenn Sie es nicht installiert haben, schauen Sie sich die Online-Manpage an oder installieren Sie es mitsudo apt-get install logrotate
)von der manpage:
quelle
Wenn Sie alle Ihre Protokolldateien löschen möchten , nicht nur die im Protokollordner der ersten Ebene, können Sie Folgendes verwenden:
Wenn Sie bereits ausgeführt haben
logrotate
, müssen Sie auch die gedrehten.gz
Protokolle löschen :Eine gültige Verwendung hierfür könnte beispielsweise das Erstellen eines VM-Appliance-Containers für die Verteilung sein.
Sie sollen nicht diese als Teil der Routinewartung tun müssen , um: als DIE ganz richtig vorgeschlagen, Verwendung
logrotate
dafür.quelle
Als Antwort auf @DEN folgen
Dadurch werden alle Protokolldateien in gefunden
/var/log
und auf 0 Byte gekürzt.quelle
*.log*
stattdessen verwenden, bin mir aber nicht sicher, ob es 100% sicher ist. Daher habe ich es nicht in die Antwort aufgenommen. Weil es Dateien wiedovecot.log-20180930
und gibtdovecot.log-20180923.gz
.Es gibt einige Methoden zum vollständigen Abschneiden einer Datei, die im Allgemeinen auf die meisten POSIX-kompatiblen Betriebssysteme anwendbar sind. Am häufigsten wird bei Shell-Skripten Folgendes festgestellt:
true > file.txt
oder: > file.txt
(und beibash
Shell ist die>
Umleitung allein ausreichend). Dies liegt an der Art und Weise, wie>
Dateien überopen()
oderopenat()
syscall mitO_WRONLY|O_CREAT|O_TRUNC
Flags geöffnet werden - das heißt, schreibgeschützt ODER erstellt, wenn der Dateiname nicht vorhanden ist, ODER schneidet den vorhandenen Dateinamen ab.In diesem Sinne können wir so etwas in C selbst implementieren:
Nennen Sie die Datei, in der dieser Code gespeichert ist,
trunc.c
und kompilieren Sie ihn mitgcc trunc.c -o trunc
. Sie haben ein kleines Dienstprogramm, das ein Dateinamenargument abschneidet, wie es in bereitgestellt wirdtrunc ./foobar.txt
. Natürlich führt dieser Code keine weiteren Überprüfungen durch, sondern schneidet nur den ersten Positionsparameter ab. Ich überlasse es den Lesern, herauszufinden, wie mit mehr als einem Positionsparameter umzugehen ist.truncate()
Nebenbei bemerkt gibt es Syscall, den wir auch verwenden und eine Datei auf eine variable Länge kürzen könnten.Wenn Sie kein C-Fan sind, könnte Python für Sie einfacher sein.
open()
Der Befehl funktioniert in Python nach demselben Prinzip: Öffnen einer Datei zum Schreiben und Abschneiden, wenn ein Dateiname vorhanden ist. So können wir es tunInformationen zum Auffinden aller
.log
Dateien finden Sie bereits in anderen Antworten - verwenden Sie*
glob oder extended glob inbash
. Es gibt auchfind -type f -name "*.log"
, welches-exec
Befehle zum Ausführen - Flag (in diesem speziellen Fallsh -c ''
zu nutzen ,>
weil>
ein Bediener Schal und keine externe ausführbare). So können Sie tunEs ist auch erwähnenswert , dass Log - Dateien im Verzeichnis der Feststellung , wie
/var/log
oft von logrotate Service gedreht werden, so wird es Dateinamen sein wie/var/log/service.log
,/var/log/service.log.1
etc, so dass Sie verwenden möchten , können*.log.[1-9]
stattdessen MusterUnter anderem können wir
/dev/null
in die gewünschte Datei kopieren . Seltsamerweise, auch wenn/dev/null
es sich um eine Gerätedatei mit Sonderzeichen handelt, ist das Ergebnis beim Kopieren, zumindest mit GNU, eine leere reguläre Dateicp
. So können wir es tunoder
Andere Lesevorschläge:
quelle
Es wird empfohlen, die Protokolle in / var / logs zu drehen, um sie mit der Logrotate-Funktionalität zu drehen, jedoch nicht, wann immer wir dies möchten. Systemprotokolle werden gedruckt und sind praktisch, um etwaige Fehler zu beheben.
Wenn die Verwendung von Logrotate nicht erforderlich ist, können Optionen untersucht werden. Obwohl das Abschneiden in einigen Unix-Versionen eine einfache Option ist, ist dieser Befehl nicht sofort verfügbar. Er muss installiert werden. Wenn der neue Befehl nicht installiert werden darf, kann die folgende Schleife verwendet werden.
quelle
for logfile in /path/*.log
stattdessen.