tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
2396
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    renslow renslow ist offline Grünschnabel
    Registriert seit
    Aug 2008
    Beiträge
    1
    Hallo,

    ich finde nichts zu folgendem Thema. Wäre nett, wenn mir dabei jemand helfen könnte.
    Das Problem allgemein:
    Ein Syslog-Server schreibt in eine Datei rein. Diese Datei will ich mit einem Perl-Skript auswerten. Damit die Festplatte nicht überläuft, lasse ich logrotate laufen, um von der Datei, in die reingeschrieben wird, ein komprimiertes Backup zu machen und sie neu anzulegen. Sobald logrotate dies tut, hört mein Skript auf, die Datei auszuwerten.
    Das einlesen der Datei geschieht im Skript mit dem Standard-Befehl open(...). Die Datei wird permanent offen gehalten, wird keine neue Zeile in die Datei geschrieben, schläft das Skript eine Sekunde lang.

    Ich bräuchte entweder eine Lösung, bei der mein Skript nicht aufhört, die Datei auszuwerten, obwohl logrotate die Datei (die vom Skript noch offengehalten wird) kurzzeitig löscht und neu anlegt.

    Oder als alternative Lösung:
    Wie kann ich, nachdem ich eine Zeile (die vom Syslog in die Datei geschrieben wurde) ausgewertet habe, ebendiese Zeile aus der Datei löschen? Damit könnte ich mir logrotate sparen.
    Meine Skills, was Perl und Zeilen einer Datei löschen angeht, beschränken sich auf "Datei in Array einlesen"->"Zeile aus Array löschen"->"Array in Datei schreiben" Was aber hier ja leider nicht anwendbar ist.

    Vielen Dank im voraus.
     

  2. #2
    Avatar von Enumerator
    Enumerator Enumerator ist offline Mitglied Kamel
    Registriert seit
    Jan 2007
    Ort
    Schreibtisch
    Beiträge
    525
    Blog-Einträge
    2
    moin!

    dein grundlegendes problem ist die funktion, die du verwendest um dateien zu öffnen: open(); ist ungeeignet für so ziemlich alles - ausser wenn man mal eben ein skript schreibt das nicht allzu oft (oder nie wieder) gebraucht wird...
    sysopen(); ist die funktion die du brauchst: du kannst viel expliziter festlegen, welches verhalten dein filehandle an den tag legen soll. die dafür nötigen konstanten (mode-parameter) sind im modul Fcntl... viel erfolg!

    gruß
    enum
     
    Zitat Zitat von Aba Assa
    "Zitate sind so etwas wie Outsourcing des Geistes."
    just-lyrics.org :: my-lyrics.org

Ähnliche Themen

  1. [Perl] Script zum Einlesen einer Datei
    Von mkoeni1 im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 3
    Letzter Beitrag: 25.04.09, 14:37
  2. [Python]Einzelne Zeilen aus einer CSV Datei löschen
    Von Bexx im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 2
    Letzter Beitrag: 23.04.09, 12:15
  3. Antworten: 7
    Letzter Beitrag: 29.10.08, 20:54
  4. alle zeilen einer datei einlesen
    Von lambofgod im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 28.05.07, 20:57
  5. die 4 ersten Zeilen einer Datei löschen
    Von SunBurner2k im Forum PHP
    Antworten: 5
    Letzter Beitrag: 11.11.01, 21:48