2016-04-22 10 views
0

Ich laufe Bildschirmsitzungen unter Unix. Nach dem Öffnen und Ausführen einiger Bildschirmsitzungen möchte ich den Fortschritt jeder Bildschirmsitzung überprüfen, um festzustellen, ob eine Sitzung vollständig ausgeführt wird.Wie kann ich den Fortschritt einer Bildschirmsitzung überprüfen, ohne mich erneut in die Sitzung einzufügen?

In Befehlszeile, wenn ich tippe:

$screen -ls 

ich eine Liste mit abgesetztem Bildschirm Sitzungen sehen konnte, z.B.

There are screens on: 
    4683.pts-0.xxxx (Detached) 
    4869.pts-0.xxxx (Detached) 
    4848.pts-0.xxxx (Detached) 
    4890.pts-0.xxxx (Detached) 
4 Sockets in /var/run/screen/S-xyzxyz. 

Wenn ich, wenn eine der vier Sitzungen überprüfen möchten Ausführung beendet ist, konnte ich eine Sitzung wieder anbringen Fortschritte zu überprüfen:

$screen -r 4683.pts-0.xxxx 

Dann konnte ich sehen, ob diese Sitzung ausgeführt wird beendet.

Gibt es jedoch eine Möglichkeit, den Fortschritt aller Bildschirmsitzungen zu überprüfen, ohne erneut an jede Sitzung anzuhängen?

+0

Wie definieren Sie "beendet läuft"? Ich nehme an, dass Sie in jeder Bildschirmsitzung ein Skript ausführen. Sie könnten das Skript (oder ein Skript, das danach ausgeführt wird) den Bildschirm beenden oder in eine Protokolldatei schreiben? Oder Sie können die PID des Skripts überprüfen, das Sie in der Bildschirmsitzung ausführen. – Matthew

+0

Können Sie jede Bildschirmsitzung mit dem '-L'-Argument starten und die Protokolle nach einem Wort oder Satz durchsuchen? [https://www.gnu.org/software/screen/manual/screen.html](https://www.gnu.org/software/screen/manual/screen.html) – runningviolent

Antwort

1

(Da Sie die Frage mit „tmux“ mit Tags versehen haben, ich gehe davon aus, dass Sie mit einer Antwort in Ordnung sind, die tmux statt Bildschirm verwendet.)

tmux ein Konzept der Aktivitätsüberwachung hat : Wenn eine Änderung in einem Fenster passiert, wird der Benutzer benachrichtigt. "Aktivität" ist eine visuelle Änderung des Fensters, sei es etwas ausgedruckt oder nur Programmbearbeitung (und Rückkehr zur Shell, die wiederum ihre Eingabeaufforderung ausdruckt und somit den Aktivitätsmonitor auslöst.) Wenn sich Ihre Prozesse bereits so verhalten, dann kann überspringen Schritt 2 in der Liste unten, und auch Schritt 4 zu vereinfachen.

Wenn Sie Prozesse, die eine Menge Zeug ausgeben, und Sie diese Ausgabe in eine Datei nicht umleiten möchten, müssen Sie zurückgreifen Stille Überwachung. In diesem Modus wird Tmux nach Fenstern suchen, in denen innerhalb der letzten N Sekunden keine Ausgabe erfolgt ist. Ich rate von diesem Ansatz ab, da es mehr Arbeit erfordert als die Aktivitätsüberwachung.

Also hier ist was Sie tun können:

  1. Aktivität aktivieren Überwachung für alle Fenster durch die folgenden in .tmux.conf setzen:

    set-window-option -g monitor-activity on 
    

    , dass die meisten Anwendungsfälle abdecken.

  2. Wenn Sie auf Inaktivität überwachen möchten, müssen Sie monitor-silence für jedes Fenster festlegen. Sie können es global einstellen, aber ich denke nicht, dass Sie das Glück haben werden, eine Auszeit zu haben, die zu allem passt; also hier präsentiere ich einen Befehl, der separat in jedem Fenster ausgeführt werden soll (durch Drücken von Präfix, das ist Ctrl - ein standardmäßig und dann eingeben):

    set-window-option monitor-silence N 
    

    N hier ist die Anzahl der Sekunden, nach denen Tmux das Fenster als still betrachten sollte.

  3. Jetzt können Sie alle Ihre Prozesse starten und von Sitzungen trennen.

    Hinweis: Aktivitäts- und Ruheüberwachung benachrichtigt Sie nur über Fenster, die Sie nicht ansehen; Sie sollten sich also von allen Sitzungen trennen, wenn Sie möchten, dass der Bericht, den wir im nächsten Schritt generieren, vollständig ist.

  4. Schließlich können Sie die folgenden, um herauszufinden, welche Sitzungen haben Aktivität oder Stille Benachrichtigungen laufen:

    tmux list-windows -a \ 
        -F "#{window_activity_flag}#{window_silence_flag} #S:#W" \ 
    | egrep '^(10|01)' 
    

    Was ist hier los?

    1. tmux list-windows listet windows, offensichtlich;
    2. -a bedeutet "alle Fenster aller Sitzungen auflisten";
    3. -F gibt das Ausgabeformat an. Hier geben wir zwei Flags aus (die entweder 0 oder 1 sein können), gefolgt von einem Leerzeichen und dann Session- und Fensternamen, die durch Doppelpunkt getrennt sind;
    4. schließlich wir grep für Linien, in denen entweder window_activity_flag oder window_silence_flag 1 ist, d. H. Für Fenster, für die Tmux Aktivitäts- oder Stilleberichte erzeugte. (Sie können auch Aktivitäts- und Stille-Monitore einrichten und dann für 11 Kombination grep, aber das macht das Setup noch zerbrechlicher, also lasse ich das als Übung für den Leser :)
    5. Die Backslashes dienen nur zum Formatieren - Sie entkommen den Zeilenenden. Sie können sie weglassen und den ganzen Code als oneliner verwenden.

    Die Ausgabe sieht wie folgt aus:

    10 project:vim 
    10 project:zsh 
    10 rfcs:WebDAV 
    10 rfcs:WebDAV requirements 
    10 rfcs:Versioning WebDAV 
    01 test:zsh 
    

    Die ersten fünf Fenster Aktivität Benachrichtigung haben, die letzte Schweigen Benachrichtigung hat.

+0

Vielen Dank! Das ist sehr hilfreich. – user118464

Verwandte Themen