So leeren Sie den Inhalt einer fortlaufend gestreamten Datei unter Linux

7

Ich habe das Programm mit diesem Befehl ausgeführt

command 2> sample.txt

Jetzt wächst diese Datei kontinuierlich und der Befehl wird in 5-6 Tagen beendet und ich glaube, dass die Dateigröße nicht in GB angegeben wird

Ich habe es versucht

echo "" > sample.txt Aber das macht keinen Unterschied und die Dateigröße wächst.

Ich dachte daran, Cron Job nach 1 Stunde einzurichten, um seinen Inhalt zu leeren

Wie kann ich den Inhalt der Datei leeren

user1858027
quelle
Was macht cp /dev/null sample.txtdas für dich?
Bernhard
Siehe auch unix.stackexchange.com/q/46549/977 unter Unix.SE. Ich habe dort ein Perl-Programm geschrieben, mit dem Sie in Zukunft nur die letzten X Bytes der Ausgabe behalten können.
Derobert

Antworten:

2

Da die Datei von der Anwendung offen gehalten wird, können Sie sie meiner Meinung nach nicht einfach traditionell leeren. Ein bisschen googeln fand ich:

Angenommen, der Autor des Codes, der die unendliche Datei schreibt, weiß sogar ein wenig über Unix:

  1. Für diesen Prozess gibt es eine Konfigurationsdatei, die die Ausgabeprotokolldatei benennt.
  2. Der Prozess "konfiguriert" sich selbst neu, wenn er ein SIGHUP-Signal empfängt, indem er die Konfigurationsdatei erneut liest. Wenn sich der Name der Protokolldatei geändert hat, schließen Sie die alte und öffnen Sie die neue.

Dies ist so ziemlich der UNIX-Standard für ein nie endendes Logwriter-Programm.

Abgesehen davon kann ich keine offensichtliche Lösung finden, da Sie verwendet haben >und nicht >>. Beim nächsten Mal möchten Sie möglicherweise umleiten truncateoder etwas Ähnliches, um das Problem einer unendlich geöffneten Protokolldatei zu vermeiden.

Arkenklo
quelle
Ich konnte nicht verstehen, was ich das nächste Mal tun soll, ich meine den vollständigen Befehl
user1858027
Die nie endende Datei wird durch Shell-Umleitung geschrieben, daher wird HUP leider nicht nützlich sein. Abschneiden ist nicht hilfreich, da Sie es nicht durchleiten können. Aber >>würde helfen.
Derobert
2

Alles was Sie brauchen ist:

cat / dev / null> sample.txt

oder

>sample.txt

ponsfonze
quelle
Du meintest catnicht cp. cpwürde sich beschweren cp: missing destination file operand after `/dev/null' Try `cp --help' for more information.Außer natürlich sagte OP, er habe es bereits versucht echo "" > sample.txt, was im Grunde das gleiche ist
derobert
0

Der folgende Befehl sollte funktionieren:

cat /dev/null > sample.txt  
Kannan Mohan
quelle
0

Verwenden Sie logrotate, es ist genau für diese Mission ausgerichtet

Eran Ben-Natan
quelle