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