Speichern Sie die Ausgabe von date und watch in einer Datei

35425
LoudKur

Ich bin ein Neuling in Linux und versuche, einen Befehl zu überwachen und ihn in eine Datei einzuloggen. Ich habe es versucht

watch -t -n 10 "(Datum '+ TIME:% H:% M:% S'; ps aux | grep" Muster "| wc -l)" >> Protokolldatei

und erwarte ein ergebnis wie

TIME: 10:32:30 12 TIME: 10:32:40 18 TIME: 10:32:50 2 

im Logfile gespeichert werden. Allerdings, wenn die Protokolldatei nicht druckbare Zeichen enthält. Wie erhalte ich diese Art von Ausgabe vom Befehl li

20

6 Antworten auf die Frage

32
Kasun Gajasinghe

Dies ist watchauch ohne Skripts möglich.

watch -t -n 10 "(date '+TIME:%H:%M:%S' ; ps aux | grep "pattern" | wc -l) | tee -a logfile"

Richtig. Ich schrieb, was ich auf einem Mac hatte, auf dem die Uhr nicht sofort verfügbar ist, und entschied mich für die tragbare Lösung. Deiner ist viel einfacher. Kirk vor 11 Jahren 1
Mit anderen Worten, fügen Sie eine Pipe zu "tee -a logfile" * in das Argument ein, das an "watch" übergeben wurde. Sehr sauber, danke. Wildcard vor 8 Jahren 1
18
Kirk

Um das zu tun, wonach Sie suchen, sollte ein einfaches Skript (wie @Ignacio darauf hinweist) den Trick ausführen:

while true do echo "$(date '+TIME:%H:%M:%S') $(ps aux | grep "pattern" | wc -l)" | tee -a logfile sleep 2 done 

Ich benutze teestattdessen, >>damit Sie die Ausgabe auf Ihrem Terminal sehen und in Ihrem Protokoll erfassen können.

Ich scheine mit der 1 in der ersten Zeile einen Fehler zu erhalten. Aber als ich es in wahr geändert habe, hat es funktioniert. Die Ausgabe auf dem Bildschirm zeigt jedoch "Time" und "Count" in zwei verschiedenen Zeilen an, die Protokolldatei zeigt jedoch nur die Anzahl. Gibt es eine Möglichkeit, Zeit zu beziehen und auf dieselbe Zeile in der Protokolldatei zu zählen? LoudKur vor 13 Jahren 0
Ach ja, denn der Abschlagbefehl läuft nur für 'ps'. Ich werde meine Antwort ändern. Kirk vor 13 Jahren 0
Funktioniert perfekt! Vielen Dank. Gibt es eine Möglichkeit, den Zeitstempel zur Protokolldatei hinzuzufügen, damit er in eindeutigen Dateien gespeichert wird? LoudKur vor 13 Jahren 0
Du meinst den Namen der Logdatei? Sie können beispielsweise eine Protokolldatei verwenden. $ (Datum +% J% m% d), um täglich eine neue Protokolldatei zu erstellen. Kirk vor 13 Jahren 0
Ja, das habe ich getan. Fügte den Code als Antwort auf diese Frage hinzu. Vielen Dank! LoudKur vor 13 Jahren 0
7
Ignacio Vazquez-Abrams

watchist für die Ausgabe auf einem Display gedacht. Wenn Sie einfach alle X Sekunden einen Befehl ausführen möchten, sollten Sie dafür eine Verzögerungsschleife verwenden.

while true ; do somecommand ; sleep 2 ; done 
5
Darth Android

watch ist ein ncurses-Programm und kann in einem Konsolenfenster (nicht umgeleitet) ausgeführt werden. Aus diesem Grund werden eine Reihe nicht druckbarer Zeichen erstellt (dies sind die Steuerzeichen, mit denen der Cursor zum Neuzeichnen des Bildschirms bewegt wird).

Sie könnten versuchen, die date / grep-Befehle in ein Skript zu verschieben und dann dieses Skript von einem Cronjob aus aufzurufen.

3
LoudKur

Ok, also habe ich es in ein Skript geschrieben und habe den folgenden Code:

#!/bin/sh NOW=$(date '+%Y%m%d%H%M%S') LOGFILE="log.$NOW"  while true do echo $(date '+[TIME: %H:%M:%S] Output: ' ; ps aux | grep "pattern" | wc -l ) | tee -a $LOGFILE sleep 2 done 
0
Bruno Bronosky

Ich bin auf diese Frage gestoßen, als ich versuchte, bessere / protokollierte Ausgaben zu erhalten du -sh $data_path. Ich habe das Muster "while-Befehl, schlafen" verwendet, das ich hier gefunden habe, aber etwas komplexes AWK verwendet, um die gewünschte Ausgabe zu erhalten.

while du -sh $data_path; do sleep 1; done | awk ' $1 != size { size=$1; path=$2; time=systime(); seconds=time-prevtime; if(seconds < 1000000000){ seconds=seconds" seconds" }else{ seconds="" } print size, path, strftime("%m/%d/%Y@%H:%M:%S", time), seconds;  prevtime=time }' 

Ich habe das eigentlich als Oneliner gemacht, weshalb es Semikolons gibt. Aber um es lesbar zu machen, habe ich es ausgebrochen. Die Ausgabe sieht folgendermaßen aus:

502G /var/lib/cassandra/dump/ 05/22/2018@04:46:17 503G /var/lib/cassandra/dump/ 05/22/2018@04:46:59 42 seconds 504G /var/lib/cassandra/dump/ 05/22/2018@04:47:57 58 seconds 505G /var/lib/cassandra/dump/ 05/22/2018@04:48:55 58 seconds 506G /var/lib/cassandra/dump/ 05/22/2018@04:49:53 58 seconds 507G /var/lib/cassandra/dump/ 05/22/2018@04:50:50 57 seconds 508G /var/lib/cassandra/dump/ 05/22/2018@04:51:46 56 seconds 509G /var/lib/cassandra/dump/ 05/22/2018@04:52:44 58 seconds 510G /var/lib/cassandra/dump/ 05/22/2018@04:53:41 57 seconds