2017-07-13 6 views
1

In meinem Bash-Skript versuche ich, aus der Protokolldatei/var/log/Nachricht zu überwachen - und weiter, auch wenn die Datei rotiert (wird neu erstellt und neu gestartet). Ich versuchte mit tail -f filename, aber schnell erkannte, dass dies nicht gut ist, wenn die Datei rotiert.Linux Schwanz auf rotierende Protokolldatei mit busybox

So gibt es viele Antworten für die Verwendung tail -F filename oder tail -f --retry filename (und ein paar andere Varianten).

Aber auf meinem Embedded Linux I Busybox verwenden, die eine leichte Version des Schwanzes hat:

tail [OPTIONS] [FILE]... 

Print last 10 lines of each FILE to standard output. With more than one 
FILE, precede each with a header giving the file name. With no FILE, or 
when FILE is -, read standard input. 

Options: 
     -c N[kbm]  Output the last N bytes 
     -n N[kbm]  Print last N lines instead of last 10 
     -f    Output data as the file grows 
     -q    Never output headers giving file names 
     -s SEC   Wait SEC seconds between reads with -f 
     -v    Always output headers giving file names 

If the first character of N (bytes or lines) is a '+', output begins with 
the Nth item from the start of each file, otherwise, print the last N items 
in the file. N bytes may be suffixed by k (x1024), b (x512), or m (1024^2). 

So kann sie die üblichen tail -F ... nicht tun, da diese Option nicht implementiert ist. Das obige Dokument-Snippet ist die neueste Busybox-Version - und meine ist etwas älter.

Also brauche ich eine andere Möglichkeit der Protokollierung/var/log/messages, da die Datei in einer bestimmten Größe überschrieben wird.

Ich dachte an eine einfache Bash-Linie. Also habe ich Dinge wie inotifywait gesehen, aber busybox hat das nicht. Ich sah hier:

busybox docs und es gibt eine Inotifyd, aber meine Version hat nicht diesen bestimmten Befehl. Also bin ich am Wandern, wenn es eine schlaue Art gibt, dies mit einfachen Linux-Befehlen/Kombinationen von Befehlen wie watch und tail -f und cat/less/more usw. zu tun. Ich kann nicht recht herausfinden, was ich mit den begrenzten Befehlen, die ich habe, tun muss :(

+0

@jw well ... das ist ein schwaches "Off Topic" Call und nicht sehr konstruktiv. Ich würde das für einen Teil meiner Entwicklung brauchen und technisch Teil eines Bash-Skripts. Es ist auch eine bestimmte Codezeile (oder Zeilen), die ich versuche zu entwickeln - also denke ich, dass Sie nicht korrekt sind, da Bash-Skript auch Code/Entwicklung ist ... Gedanken? –

Antwort

0

Wie werden die Protokolle gedreht? sind Sie mit einem logrotate Utility? Wenn ja, haben Sie versucht, Ihre Linie zu postrotate Abschnitt in der Konfigurationsdatei hinzufügen?

von Mann logrotate

postrotate/endscript Die Zeilen zwischen Postrotate und Endscript (beide davon müssen in Zeilen selbst erscheinen) werden ausgeführt, nachdem die Protokolldatei rotiert wurde. Diese Direktiven dürfen nur innerhalb einer Protokolldatei angezeigt werden. Siehe auch prerotate.

+0

Es ist durch den Kernel nicht ich speziell gemacht (d. H. In '/ var/log/message') –

+0

Welche Embedded-Linux verwenden Sie? –

+0

@WayneVosberg uClinux mit busybox –