Ich möchte, dass mein PC bei jedem Endereignis einen Signalton abgibt
Ich habe den folgenden Befehl
tail -f development.log | grep "something rare"
Gibt es eine einfache Möglichkeit, es an etwas zu leiten, das piept? mögen
tail -f development.log | grep "something rare" | beep
Wenn ja, wird die Grep-Ausgabe weiterhin angezeigt?
Antworten:
Definieren Sie einfach
beep
wie folgt:Dann können Sie Ihren Befehl verwenden:
quelle
sed
oder ähnlich (zwischen tail und grep), um diesomething rare
mit sich selbst oft durch eine reguläre Ausdrucksweise zu ersetzen . Wie oft es durchgeführt werden muss, hängt davon ab, wie viel die Pipe gepuffert ist.tail -f development.log | stdbuf -oL -eL grep "something rare" | beep
Der GNU-Bildschirm verfügt über eine integrierte Funktion, die einen Piepton ausgibt, wenn sich ein bestimmtes Fenster ändert: siehe den entsprechenden Abschnitt auf der Manpage .
Zusammenfassung der Überschrift:
Wie in den Kommentaren erwähnt, ertönt bei jedem neuen Protokolleintrag ein Piepton , nicht nur bei den Einträgen, die mit "etwas Seltenem" übereinstimmen. Dies entspricht also nicht den Anforderungen des OP. Immer noch ein nützlicher Trick, um IMHO zu kennen.
Sie können das Beste aus beiden Welten herausholen, indem Sie zwei
screen
Fenster<C-a> c
öffnen ( um ein Fenster zu öffnen,<C-a> <C-a>
zwischen zwei Fenstern zu wechseln):tail -f yourfile.log | grep 'something rare'
tail -f yourfile.log
Dann können Sie das Protokoll in Fenster 2 vorbeirollen sehen, und Sie werden von Fenster 1 aus einen Piepton erhalten, wenn "etwas Seltenes" auftritt.
screen
ist unglaublich vielseitig - ich empfehle dringend, es nachzulesen.quelle
tail -f yourfile.log | grep something\ rare
eher als nur dastail -f logfile
something rare
. Bearbeitet, um dies widerzuspiegeln. Das grep würde funktionieren, aber dann würde er den Rest des Protokolls nicht sehen, nur die seltenen Zeilen - so wie ich es verstehe, möchte er in der Lage sein, das gesamte Protokoll vorbeirollen zu sehen, aber über bestimmte Ereignisse informiert zu werden.Sie können verhindern, dass die Ausgabe im Befehl grep zwischengespeichert wird. Siehe man grep für Details.
Sie können die Grep-Ausgabe in einen Piepton umleiten.
Das folgende Beispiel stammt von einem Piepton ...
In diesen Handbüchern steckt eine Menge Gutes. Wenn wir sie nur nicht lesen müssten, um sie zu finden. ;-)
quelle
Der watch-Befehl hat eine --beep-Option, und Sie können auch das Abfrageintervall einstellen, aber der Standard mit 2 Sekunden sollte in Ordnung sein
quelle
watch
Ihren Parameter / Befehl alle (Intervall-) Abschnitte ausführen und dann die Ergebnisse zum vorherigen Durchlauf zurückführen. Daher sollten Sie die normale Version des Befehls tail verwenden, anstatttail -f
watch --beep
meinen Schwanz / Grep hinzugefügt und eingewickelt habe, bekam ich immer noch keinen Piepton).Sie können sed verwenden, um das Steuerelement G wie folgt hinzuzufügen:
oder nur in seltenen Zeilen, ohne grep zu verwenden, wie folgt:
die sagt: auf den Linien , wo etwas selten auftritt, s ubstitute alles für den gleichen Stoff mit Steuer-G gehefteten am Ende, und druckt (aber nicht die nicht passenden Zeilen drucken). Funktioniert super!
quelle
Hm, schwierig. Wir könnten vielleicht so etwas tun?
Oder in deinem Fall
Es scheint jedoch etwas zu puffern. Ich werde schauen, ob es eine Möglichkeit gibt, diese Pufferung durch die
for
Schleife auszuschalten .Anscheinend sollten Sie in der Lage sein, die Pufferung der Pipe mit anzupassen,
ulimit -p
aber das klagt mich immer wieder über ein ungültiges Argument an. Ich habe auch einen Beitrag gefunden, der behauptet, dass Sie den Kernel neu kompilieren müssen, um dieses Limit zu ändern.quelle
In einem früheren Job konnte ich mit nur command-fu keinen zuverlässigen Beobachter finden, daher hatte ich ein Wrapper-Skript wie das folgende, das alle poll_duration Sekunden die Datei inspizierte und die neuen Zeilen nach dem interessierten Ausdruck durchsuchte.
Dies war auf einer Unix-Maschine. Unter Linux können Sie mithilfe der inotify- Filewatcher-Oberfläche eine Verbesserung erzielen. Wenn dieses Paket ( inotify-tools unter Ubuntu) vorhanden ist, ersetzen Sie es
mit
Dieser Aufruf wird blockiert, bis die Datei geändert wurde. Die blockierende Version ist fast so effizient wie die
tail -f
Version, wenn die Pipe so konfiguriert werden könnte, dass sie ohne Pufferung funktioniert.Hinweis: Das Skript führt zunächst eine
head --lines=$new_linecount
Aktion aus, um sicherzustellen, dass Zeilen, die der Datei hinzugefügt wurden, nachdem wir sie überprüft haben, den Teil der Datei, der in dieser Schleife überprüft wird, nicht verzerren.quelle