Titel des dynamischen Terminals: Zeigt den Serverlaststatus im X-Sekunden-Intervall an

485
virtualeyes

Wenn ich in meinem WM eine Reihe von Terminals geöffnet habe, wäre es schön, wenn die Fenstertitel des Terminals den aktuellen Benutzer und den Host (einfach) sowie die dynamischen Serverlastdetails widerspiegeln, die in bestimmten Abständen aktualisiert werden (härter).

Mit PROMPT_COMMAND kann ich die gewünschten Daten in den Titel des Terminalfensters bringen. Es ist jedoch erforderlich , etwas zu tun (z. B. das Ändern von Verzeichnissen), damit der Fenstertitel mit den neuesten Informationen aktualisiert wird. Im Idealfall möchte ich, wie viele, nichts tun.

Gibt es eine Art Zeitlimitintervall und eine Magie, die ich anwenden kann, um den Fenstertitel ohne Benutzerinteraktion dynamisch zu aktualisieren?

function curr_load { # interval wrapper here, or somewhere at any rate ;-) uptime } PROMPT_COMMAND='echo -ne "\033]0;$@$ [`curr_load`]\007"' 

Danke für Hinweise

0

2 Antworten auf die Frage

2
Dave C

Die einzige Möglichkeit, die ich kennen würde, wäre ein Hintergrundprozess. Sie können dies entweder automatisch mit .bash_profile oder ähnlichem starten (wahrscheinlich möchten Sie jedoch prüfen, ob Sie sich in einem Xterm befinden und dies führt zu Ladevorgängen, da jedes Fenster es anzeigt), oder Sie starten es einmal manuell, wenn Sie sich anmelden.

Erstellen Sie zum Beispiel mit Ihrem Code oben eine Datei mit dem Namen printload, die den folgenden Befehl enthält:

#!/bin/bash function curr_load { # interval wrapper here, or somewhere at any rate ;-) uptime } while true;  do  echo -ne "\033]0;$@$ [`curr_load`]\007" sleep 3 done 

Und dann einfach mit printload starten:

printload & 

Das können Sie natürlich in ein Skript stecken, um automatisch oder manuell aufgerufen zu werden.

** HINWEIS: Nicht auf Syntax getestet, sollte aber theoretisch funktionieren. **

+1 jetzt interessant, wie wäre es, wenn Sie einfach den obersten Befehl für die Ladeleitung im Stapelmodus aktivieren und die Verzögerungszeit in der Funktion curr_load? Dies scheint ein einfacherer und weniger ressourcenintensiver Ansatz zu sein virtualeyes vor 11 Jahren 0
Ich hätte gedacht, die Betriebszeit wäre weniger intensiv als etwas wie top -b -n 1 | grep "top -" und auch das hat noch ein paar andere informationen, denke ich? Jede Methode, auf die Sie die Methode (Hintergrundschleife) generieren, ist jedoch die einfachste Möglichkeit, ein periodisches Update durchzuführen. Dave C vor 11 Jahren 0
Richtig, Uptime zeigt eine begrenzte Menge von Informationen an, und die Idee der Schleife ist prinzipiell gut. Ich habe gerade im Batch-Modus von top nachgesehen und gedacht, dass das Kombinieren des Trim-Flags -i (um nur die Zusammenfassung anzuzeigen) und des Intervalls -d-Flag alle 30 Sekunden ausgegeben werden soll, ein Ressourcenproblem wäre. Ich werde Ihren Ansatz ausprobieren. Was auch immer die Arbeit erledigt, wird den Server durch nichts davon zum Stillstand bringen ;-) virtualeyes vor 11 Jahren 0
Natürlich hängt alles davon ab, welche Informationen Sie wünschen. Wenn Sie das Trimm-Flag oben ausführen, werden immer noch mehrere Datenzeilen zurückgegeben, von denen die erste scheinbar die gleichen Informationen wie die Betriebszeit aufweist, die aber noch eingeholt werden müssen. Natürlich, wenn Sie mehrere Informationen aus verschiedenen Zeilen erhalten möchten, dann kombinieren Sie oben. So oder so, wie Sie sagen, nichts sollte die Welt zum Stillstand bringen. Viel Glück. Dave C vor 11 Jahren 0
Bearbeiten Sie Ihre Antwort und ich werde sie abhaken. Ihr Runlevel scheint eine endlose Schleife zu sein. Ich denke, Sie wollten "printload" anstelle von "runload" in dieser Zeile haben: "runload 2> & 1>" / dev / null & "in der Runload-Datei. Durch das Umleiten von standard out und err nach / dev / null wird auch der Titel des Terminals angezeigt. Es scheint, dass bei den Shell-Escape-Sequenzen "\ 033] 0;" und "\ 007" gibt es keine Ausgabe aus dem Echo oder zumindest keine, die gepiped werden kann. Beispielsweise erzeugt "./runload> foo.txt" nur eine leere Datei, während "./runload &" den dynamischen Terminaltitel wie gewünscht generiert. virtualeyes vor 11 Jahren 0
Done - removed runload entirely as if printload & works then almost as easy to just do that than runload which does it for you. STDERR etc redirect removed also. Dave C vor 11 Jahren 0
0
virtualeyes

Ich habe die letzten Schritte mit dem Hintergrundaufgaben-Ansatz von @Dave C mit zwei ausführbaren Bash-Skripts auf dem Remote-Server, Termstatus und Termstatuslauf ausgeführt.

#!/bin/bash function curr_load { cat /proc/loadavg | awk '' } function mem_free { cat /proc/meminfo | grep MemFree|awk ''  } while true;  do echo -ne "\033]0;$@$ `mem_free` [`curr_load`]\007" sleep 5 done  ****** #!/bin/bash ~/scripts/./term-status & 

Wenn die Dateien auf dem Remote-Server vorhanden sind, ändere ich vorhandene bash-Aliase in ssh in Ziel-Remote-Maschinen und füge den Befehl beim Anmelden wie
folgt aus : Alias ​​goapache = 'ssh -i $ user @ some-ip -t ~ / scripts /./term-status-run; bash --login '

In meinem Linux-Fenstermanager (i3) haben gestapelte Terminals, die mit einem Remote-Server verbunden sind, folgende Titel:

foo@serv1 226MB [0.43 0.50 0.35] bar@serv2 332MB [0.23 0.38 0.27] baz@serv3 295MB [0.15 0.22 0.26] 

Berücksichtigung des freien Speichers und der Lastmittelwerte in Intervallen von 5 Sekunden.

Ist der Trick, irgendwie schön, den Serverstatus in der Titelleiste des Terminals zu sehen, ganz zu schweigen davon, dass lokale Terminals viel einfacher von Remote zu unterscheiden sind.