Wenn man einen Raum synchronisiert und viele screen-Sessions per linbo-remote laufen, ist es wünschenswert, dass man zwischendurch nachsehen kann, wie weit die Übertragungen im einzelnen bereits fortgeschritten sind; oder auch einfach nur, was die Clients gerade tun bzw. nicht tun.
Das musste man bisher mit „screen -r <PID>“ machen, wobei man die <PID> per Hand eintippen musste, was bei vielen Sessions u.U. etwas umständlich sein kann.
Dieses Script automatisiert diesen Prozess, indem es alle laufenden screen-Sessions ausliest und ein „grafisches“ Menu mit Hilfe des „dialog“-Befehls anbietet, um die entsprechende Session „zurückzuholen“. In Moment werden jedoch auch die Sessions der laufenden Bittorrent-Screens mit angezeigt!
Das Script nennt sich „screen-manager.sh“. Man kann es unter linuxmuster 6.x ausprobieren; es dürfte aber auch unabhängig davon funktionieren (ungetestet).
Vorgehensweise:
Wie üblich kommt man mit
STRG+A D
wieder aus einer Session heraus (Detached) und landet automatisch wieder im Hauptmenu!
#!/bin/bash # screen-manager.sh # Geeignet für linuxmuster 6.x # von Michael Hagedorn # nach einer Vorlage von # http://nixcraft.com/showthread.php/15048-Passing-menu-arguments-from-file-to-cdialog-xdialog VER=1.1 # Wieviele Sessions laufen? lines=$(screen -ls | grep -F Detached |wc -l); # echo $lines; for((j=1;j<$lines+1;j++)); do # Welche zugehörigen Namen der screens? (werden in Datei geschrieben) NAME=$(screen -ls | grep -F Detached |awk -F\ '{print $1} ' |cut -d "." -f 2 |head -n $j |tail -n 1); # Die Optionen für das "dialog"-Menu werden in eine Datei geschrieben # ("off" bedeutet: Alle Menupunkte per default inaktiv) echo $NAME /off >>/tmp/names.$$ done i=1 while read line do # Welche PIDs gehören zu den Namen? (werden ebenfalls in Datei geschrieben) PID=$(screen -ls | grep -F Detached |awk -F\ '{print $1} ' |cut -d "." -f 1 |head -n $i |tail -n 1); echo $PID $line >>/tmp/options.$$ i=`expr $i + 1` done </tmp/names.$$ OPTIONS=`cat /tmp/options.$$` cleanup(){ rm -f /tmp/names.$$ rm -f /tmp/options.$$ rm -f /tmp/ans.$$ } # Hauptmenu erzeugen: main_menu() { dialog --backtitle "Screen-Session-Manager $VER" \ --radiolist "Welche Session soll beobachtet werden?" 20 40 15 ${OPTIONS} 2>/tmp/ans.$$ # Abbruch-Bedingung: opt=${?} if [ $opt != 0 ]; then echo "Ende!"; cleanup; exit 0; fi # Auswahl merken: result=`cat /tmp/ans.$$` if [ $result ] then screen -r $result else echo "Keine Auswahl getroffen! Nochmal..."; fi cleanup; } while true; do main_menu done #EOF
Das Script wurde mittlerweile an linuxmuster-v7.x angepasst, da dort anstelle von screen der Befehl tmux verwendet wird, um die Torrents im Hintergrund laufen zu lassen. Es waren ein paar Anpassungen notwendig, die man hier finden kann: https://ask.linuxmuster.net/t/screen-manager-neue-version-an-tmux-angepasst/9855