Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

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.

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 .

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...

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 ?

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

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.)

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.

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

bin als root angemeldet... daran lags nicht

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...

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?

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 ; ?

Der Befehl "find" bietet selbst die Option "-delete" an. Einfach hinten mit dranhängen. Dann brauchst du rm garnicht zu benutzen.

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

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.

  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 :P

Scheinbar ist die Aktion in meiner Red Hat Version noch nicht vorhanden. Kann ich das Updaten ?

Ah, okay.

Gute Frage - ich benutze selber nur SuSe..

Ja auf meiner Testkiste ist auch Suse installiert...da ist "-delete" vorhanden...

auf der RedHat Kiste(wo es schließlich laufen soll) nicht ... ^^

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.