Einfache Möglichkeit, die filegröße (Stdout) auf einer Shell-Skriptebene zu beschränken?

Ok, das ist ein sehr praktischer Anwendungsfall aus meiner Sicht.

Lassen Sie sagen, ich habe eine einfache Shell Oneliner, die logging der Ausgabe in eine file. Das kann einfach alles sein, zum Beispiel tcpdump. Gibt es irgendeine generische und triviale Weise, um sicherzustellen, dass die Ausgabedatei die angegebene Größe nicht überschreitet?

  • Warum "bash -c" im Supervisor anstelle von Skript direkt anrufen?
  • wie man ein Skript schreibt, das nur auf neue Log-Einträge wirkt
  • Kill Kind Prozess, wenn die Eltern verlassen
  • Wie kann ich problemlos HTML-Entitäten aus einem Standard-Input-Stream in Linux konvertieren?
  • Benötige nicht die ganze Zeile, nur das Spiel aus dem regulären Ausdruck
  • Einstellen der timezone mit einem automatisierten Skript
  • Resoning hinter diesem, ist zu schützen vor dem Ausfüllen der gesamten verfügbaren Platz auf der Mount-Punkt aus Versehen. Wenn ich das Skript vergesse, oder es wird GBs data pro Stunde geben, dann kann diese einfache Debugging-Aufgabe zu einem möglichen Systemabsturz führen.

    Jetzt bin ich mir bewusst, dass die Optionen in einigen der Tools (wie Kombination von -W / -C in tcpdump). Was ich brauche, ist ein sehr generisches Failsafe.

    Lange Geschichte kurz – wenn ich ein Skript wie:

    % this -is --my=very|awsome|script >> /var/tmp/output.log 

    So stellen Sie sicher, dass output.log nie größer als 1GB wird.

    Skript kann abstürzen, getötet werden oder was auch immer.

    Solution, die ich suche, sollte einfach und einfach sein, wobei nur Werkzeuge in beliebten Distributionen wie Ubuntu / Debian / Fedora zur Verfügung stehen. Im Allgemeinen etwas weit verbreitet. Kompliziertes, mehrzeiliges Programm ist hier keine Optionen, unabhängig von der Sprache / Technik.

  • Wie spalte ich einen String gegen einen Charakter in BASH?
  • Ubuntu dpkg, nicht interaktive Installation
  • Wie kann ich bash machen, um Shell-Befehle zu syslog zu protokollieren?
  • Machen Sie cron log rsync nur, wenn es Übertragung gab
  • Bash script gibt "out of memory" in cron, aber nicht in der Shell
  • Wie kann ich ein lokales bash-Skript auf entfernten Rechnern über ssh ausführen?
  • 2 Solutions collect form web for “Einfache Möglichkeit, die filegröße (Stdout) auf einer Shell-Skriptebene zu beschränken?”

    Sie können den head dafür benutzen:

     command | head -c 1G > /var/tmp/output.log 

    Es akzeptiert K, M, G und dergleichen als Suffixe (Bytes sind die Voreinstellung). Anhängen 'B', um die Basis 10 Versionen zu verwenden.

    Legen Sie die maximale filegröße für einen Benutzer fest, der nur zum Ausführen dieser Skripts verwendet wird.

    Die file /etc/security/limits begrenzt einen Benutzer mit den Werten von "default", es sei denn, es gibt explizite Werte für einen bestimmten Benutzer. Diese benutzerspezifischen Werte überschreiben die Standardwerte. Die file kann je nach Betriebssystem einen etwas anderen Namen haben.

    Wenn Ihr Log-Benutzer log_maker heißt, fügen Sie diese Zeile zur file hinzu:

    log_maker hard fsize 1000000

    Die Zahl nach fsize ist die maximale filegröße in KB.

    Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de réseau.