Creek2k3 Geschrieben 19. Oktober 2009 Geschrieben 19. Oktober 2009 Moin, ich wollte einen cronjob anlegen, der .log Files in einem Verzeichnis X löscht. Das Ganze soll zur Mitte des Monats passieren. um 23:30Uhr. Ich habe mir mal diesen Befehl zusammen gelegt. 30 23 15 * * find /data/temp -type f -mtime +15 -exec{} \; Bei dem Befehl bin ich mir jetzt nicht ganz sicher. Weil das Script nur .log Dateien löschen soll, die älter sind als 15 Tage. keine Aktuellen Dateien. Zitieren
lupo49 Geschrieben 19. Oktober 2009 Geschrieben 19. Oktober 2009 Sollte so funktionieren. Gerade lokal getestet. Wenn das viele Log-Dateien sind, könntest du anstelle von exec das xargs verwenden. 30 23 15 * * find /data/temp -type f -mtime +15 | xargs rm Das hat den (geringen) Vorteil, dass nicht bei jedem Löschvorgang einer neuer Prozess erzeugt wird, sondern einmalig rm mit einer endlichen Anzahl von Dateinamen aufgerufen wird. Zitieren
Creek2k3 Geschrieben 19. Oktober 2009 Autor Geschrieben 19. Oktober 2009 Okay. Aber könnte ich auch definieren, dass nur *.log Dateien gelöscht werden ? Nicht das aus versehen andere DAtein die älter als 15Tage sind mit gelöscht werden . Zitieren
flashpixx Geschrieben 19. Oktober 2009 Geschrieben 19. Oktober 2009 Warum nutzt Du nicht Logrotate, das ist das entsprechende Tool für Dein Vorhaben. Die find Lösung ist eher mehr als "gebastel" Zitieren
lupo49 Geschrieben 19. Oktober 2009 Geschrieben 19. Oktober 2009 (bearbeitet) Ja, mittels "-name": 30 23 15 * * find /data/temp -type f -mtime +15 -name "*.log" | xargs rm Wenn du logrotate nutzt hast du eine Masse an Vorteilen (Komprimierung, Benachrichtigung, ...) gegenüber des jetzigen Befehls. http://schlayer.org/logrotate.html http://www.debian-administration.org/articles/117 Bearbeitet 19. Oktober 2009 von lupo49 Zitieren
Creek2k3 Geschrieben 19. Oktober 2009 Autor Geschrieben 19. Oktober 2009 Ja, mittels "-name": 30 23 15 * * find /data/temp -type f -mtime +15 -name "*.log" | xargs rm Wenn du logrotate nutzt hast du eine Masse an Vorteilen (Komprimierung, Benachrichtigung, ...) gegenüber des jetzigen Befehls. Kurzanleitung zu logrotate Creating logfile archives with logrotate Ja super Danke, werd ich gleich mal testen... Zitieren
Creek2k3 Geschrieben 21. Oktober 2009 Autor Geschrieben 21. Oktober 2009 Okay klappt alles perfekt Ich will nun das ganze Täglich ausführen lassen. Also bietet es sich ja an das "Script" in "/etc/cron.daily/" abzulegen. Muss ich da was beachten ? Oder schreib ich den Befehl einfach in eine Datei, die ich dort ablege ? Zitieren
flashpixx Geschrieben 21. Oktober 2009 Geschrieben 21. Oktober 2009 Logrotate wird durch klogd ausgeführt. Zitieren
AnDi_P Geschrieben 21. Oktober 2009 Geschrieben 21. Oktober 2009 Okay klappt alles perfekt Ich will nun das ganze Täglich ausführen lassen. Also bietet es sich ja an das "Script" in "/etc/cron.daily/" abzulegen. Muss ich da was beachten ? Oder schreib ich den Befehl einfach in eine Datei, die ich dort ablege ? Du könntest ganz einfach den gewünschten cronjob mit "crontab -e" anlegen. #min h dom m dow cmd 30 20 * * * <Befehl> Somit würde an jedem Tag, in jedem Monat, um 20:30 Uhr dein Befehl ausgeführt werden. Abspeichern kannst du dann die eingaben mit den üblichen vi-Befehlen -> ESC + :wq Lg Zitieren
lupo49 Geschrieben 21. Oktober 2009 Geschrieben 21. Oktober 2009 Muss ich da was beachten ? Oder schreib ich den Befehl einfach in eine Datei, die ich dort ablege ? Wenn du das Skript in /etc/cron.daily/ ablegst, dann wird es halt einmalig pro Tag ausgeführt und nicht um 23:30 Uhr. (Die genaue Uhrzeit des Ausführens steht in der /etc/crontab.) Zitieren
Creek2k3 Geschrieben 22. Oktober 2009 Autor Geschrieben 22. Oktober 2009 wenn ich 00 17 * * * find /var/log/tomcat -type f -mtime +30 -name "*.log" | xargs rm ausführen lasse bekomme ich rm: missing operand Try `rm --help' for more information. Versteh ich nicht... wenn ich den befehl normal eingebe funktioniert der. Zitieren
AnDi_P Geschrieben 22. Oktober 2009 Geschrieben 22. Oktober 2009 Ohne das jetzt mal nachzustellen. Vielleicht ein Rechteproblem? Standardmäßig sind die meisten Dateien in /var/log/ ja auf den Benutzer root zugelassen. Hast du den Befehl manuell als root getestet, oder normaler user? Wenn als root, dann den cronjob auch als root anlegen, dann sollte es klappen, denke ich. Lg Zitieren
flashpixx Geschrieben 22. Oktober 2009 Geschrieben 22. Oktober 2009 Mir erschließt sich das überhaupt nicht, warum Du hier selbst Dir etwas zusammen baust, dass Du mit logrotate und klogd komplett fertig hast Zitieren
Creek2k3 Geschrieben 22. Oktober 2009 Autor Geschrieben 22. Oktober 2009 bin als root angemeldet... daran lags nicht Zitieren
Creek2k3 Geschrieben 22. Oktober 2009 Autor Geschrieben 22. Oktober 2009 Mir erschließt sich das überhaupt nicht, warum Du hier selbst Dir etwas zusammen baust, dass Du mit logrotate und klogd komplett fertig hast es geht nicht um linux .logs sondern um log files von Thrid-Party-Software... Ich weiß nicht wie das da mit logrotate ist... Zitieren
flashpixx Geschrieben 22. Oktober 2009 Geschrieben 22. Oktober 2009 es geht nicht um linux .logs sondern um log files von Thrid-Party-Software... Ich weiß nicht wie das da mit logrotate ist... Dann wäre es vielleicht zuerst sinnvoll, wenn Du Dir logrotate anschaust, denn logrotate beschränkt sich nicht auf Linux-Logs, sondern auf Dateien, die Du selbst angeben kannst. So wie Du es schreibst hast Du Dir logrotate nicht wirklich angeschaut, sondern favorisierst immer noch Deine Lösung. Warum fragst Du dann überhaupt, wenn Du eh Deine Lösung beibehältst? Zitieren
Creek2k3 Geschrieben 22. Oktober 2009 Autor Geschrieben 22. Oktober 2009 Ohne das jetzt mal nachzustellen. Vielleicht ein Rechteproblem? Standardmäßig sind die meisten Dateien in /var/log/ ja auf den Benutzer root zugelassen. Hast du den Befehl manuell als root getestet, oder normaler user? Wenn als root, dann den cronjob auch als root anlegen, dann sollte es klappen, denke ich. Lg Ich versteh´s nicht... Warum läuft der Befehl mit normaler Eingabe aber nicht über crontab -e ??? rm: too few arguments Try `rm --help' for more information. in der Crontab datei steht: 00 14 * * * find /var/log/xxx -type f -mtime +5 -name "*.log" | xargs rm muss da hinter dem "rm" noch was stehen? muss ich das abschließen mit nem ; ? Zitieren
AnDi_P Geschrieben 22. Oktober 2009 Geschrieben 22. Oktober 2009 Der Befehl "find" bietet selbst die Option "-delete" an. Einfach hinten mit dranhängen. Dann brauchst du rm garnicht zu benutzen. Zitieren
Creek2k3 Geschrieben 22. Oktober 2009 Autor Geschrieben 22. Oktober 2009 Der Befehl "find" bietet selbst die Option "-delete" an. Einfach hinten mit dranhängen. Dann brauchst du rm garnicht zu benutzen. laut man find gibt es keinen -delete operator Zitieren
AnDi_P Geschrieben 22. Oktober 2009 Geschrieben 22. Oktober 2009 Du hättest ein bisschen weiter unten im Manual schauen müssen ;-) ACTIONS -delete Delete files; true if removal succeeded. If the removal failed, an error message is issued. Use of this action automatically turns on the '-depth' option. Zitieren
Creek2k3 Geschrieben 22. Oktober 2009 Autor Geschrieben 22. Oktober 2009 Aktionen: -exec Kommando; führt das Kommando aus; die Aktion ist wahr, wenn das Kommando einen Status von Null liefert; alle auf den Kommandonamen folgenden Argumente bis zu einem Semikolon ; werden als Kommandozeilenargumente für das Kom- mando interpretiert; das Semikolon kann nicht weggelassen werden, und es muà durch mindestens ein Whites- pace von der letzen Option getrennt werden; die Konstruktion {} wird durch den Pfadnamen der Datei ersetzt; die Klammern und das Semikolon müssen in der Kommandozeile für find quotiert werden, damit sie nicht von der Shell bearbeitet werden -fprint Ausgabedatei schreibt den Pfadnamen der getesteten Datei in die Ausgabedatei; wenn die Ausgabedatei nicht existiert, wird sie erzeugt, sonst wird sie erweitert; die Standardausgabe und die Standardfehlerausgabe werden als /dev/stdout und /dev/stderr angesprochen -fprint0 Ausgabedatei schreibt den Namen der getesteten Datei in die Ausgabedatei und schlieÃt die Ausgabe mit einem Nullbyte ab, wie -print0 -fprintf Ausgabedatei Format schreibt den Namen der getesteten Datei in die Ausgabedatei und benutzt dabei das Format mit Sonderzeichen wie bei printf -ok Kommando; wie -exec, vor der Ausführung des Kommandos wird aber noch eine Bestätigung erwartet; nur eine Eingabe, die mit einem B oder einem y beginnt, führt zur Ausführung des Kommandos -print gibt den vollständigen Pfadnamen der getesteten Datei auf die Standardausgabe -print0 gibt den Pfadnamen der getesteten Datei, von einem Nullbyte abgeschlossen, auf die Standardausgabe; auf diese Weise können auch Pfadnamen korrekt weiterverarbeitet werden, die ein Zeilenende enthalten -printf Format gibt für die getestete Datei die Zeichenkette Format auf der Standardausgabe aus; Format kann verschiedene Sonderzeichen und Platzhalter enthalten, die von find bearbeitet werden: \a Alarmton das steht bei mir Zitieren
Creek2k3 Geschrieben 22. Oktober 2009 Autor Geschrieben 22. Oktober 2009 Scheinbar ist die Aktion in meiner Red Hat Version noch nicht vorhanden. Kann ich das Updaten ? Zitieren
AnDi_P Geschrieben 22. Oktober 2009 Geschrieben 22. Oktober 2009 Ah, okay. Gute Frage - ich benutze selber nur SuSe.. Zitieren
Creek2k3 Geschrieben 22. Oktober 2009 Autor Geschrieben 22. Oktober 2009 Ja auf meiner Testkiste ist auch Suse installiert...da ist "-delete" vorhanden... auf der RedHat Kiste(wo es schließlich laufen soll) nicht ... ^^ Zitieren
lupo49 Geschrieben 22. Oktober 2009 Geschrieben 22. Oktober 2009 Pack alles in ein Skript und trage das dann in die crontab ein. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.