PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Script für log Dateien



Schmolleg
18-12-2004, 02:06
Hallo Leute ich wollte mir einen Script machen womit ich mal alle logs leeren kann die in /var/log/ sind aber wie muss ich den Script schreiben das auch in den Unterverzeichnissen in /var/log/ die logs geleert werden ?

for i in `ls /var/log/*`
do
echo "" > $i
done

Das bringts nur für die Dateien in /var/log

Joghurt
18-12-2004, 02:18
1. Kannst du die Dateien nicht einfach löschen?
2. find /var/log -type f anstatt ls

Schmolleg
18-12-2004, 12:23
Also alle löschen ist schlecht dann meckern doch die Progs die die logs brauchen rum und alle neu anlegen will ich auch nicht.

HangLoose
19-12-2004, 10:32
moin moin

ich kenne mich mit shellscripting nicht so gut aus, daher ein lösungsvorschlag mittels python ;)


#! /usr/bin/env python

import os
import sys

def getFileNames(path):
filelist = []

for root, dirs, files in os.walk(path):
for name in files:
if name.startswith('.'):
continue
else:
filelist.append(os.path.join(root,name))
return filelist

if __name__ == '__main__':
if len(sys.argv) != 2:
print 'usage: \n\n'+ str(sys.argv[0].split('/').pop()) + ' dirname'
else:
logfiles = getFileNames(sys.argv[1])
for each in logfiles:
print each
#os.popen('echo 0 > ' + each)


der teil mit echo 0 ist nicht getestet, hab keine lust mein logs zu leeren ;).


Gruß HL

Hans-Georg Normann
19-12-2004, 15:24
Wenn man mich fragt, viel zu viel Aufwand für eine simple Aufgabenstellung. Die Methode von Joghurt liefert doch schon alles
find /var/log -type f -exec cp /dev/null {} \;Das war's, zumindest was die Aufgabenstellung angeht.

Ich würde es trotzdem nicht machen, denn da gibt es auch die eine oder andere Datei, z. b. wtmp, welche nicht im Textformat vorliegt. Warum nimmst du nicht einfach etwas fertiges wie logrotate? Räumt periodisch auf und entsorgt auch die ganz alten klamotten und man weiß, dass es läuft.

Hans

Schmolleg
31-12-2004, 01:33
Ich würde nur gerne mit einem c++ Programm alle datei in /var/log/ leeren also das halt nur mit c++:

for i in `ls /var/log/*`
do
echo "" > $i
done

Hat jemand eine Idee wie ich das schreiben kann ?

peschmae
31-12-2004, 09:16
Wieso nicht logrotate? Das macht das viel besser und sinnvoller (ältere Logs werden erst gegzippt und dann mal gelöscht und das ganze von selber und periodisch).
Da hast du dann auch immer etwas logs herumstehen falls du die mal brauchen solltest.

MfG Peschmä