Welcher Softwareentwickler kennt es nicht, kurz vor Feierabend noch "kurz" ein Command auf der Konsole absetzen und dann ab nach Hause.
Schon beim Druck auf "Enter" wird einem dann bewusst, dass man es doch lieber im Screen hätte starten sollen. Spätestens nach 30 Minuten ärgert man sich dann so sehr, dass man das Command abbricht und es im Screen neustartet ;)
Aber auch hierfür gibt es eine Lösung, ein kleines Tool namens reptyr. Mit reptyr kann man einen laufenden Prozess in einem anderen Terminal übernehmen.
Unter Debian und Ubuntu wird es einfach aus den Repos installiert
root@SERVER:~# apt-get install reptyr
Testen kann man das Ganze, indem man sich 2x per SSH auf einen Server verbindet und dann folgende Befehle ausführt:
root@SERVER:~# tail -f /var/log/syslog
Mit ps kann man nun die PID und das TTY sehen:
root@SERVER:~# ps aux |grep tail root 23917 0.0 0.0 5916 616 pts/4 S+ 10:27 0:00 tail -f /var/log/syslog
Hier kann man schön sehen, dass der tail Prozess (PID 23917) dem pts/4 gehört. Nun lässt man den tail weiter laufen, startet auf der zweiten Konsole den Screen und uebernimmt darin den Prozess mit reptyr:
root@SERVER:~# screen root@SERVER:~# reptyr 23917
Zur Kontrolle nun wieder ein ps:
root@SERVER:~#ps aux |grep tail root 23917 0.0 0.0 5916 668 pts/6 Ss+ 10:27 0:00 tail -f /var/log/syslog
Hier sehen wir, dass der Prozess am pts/6 attached ist und man die Syslogmeldungen nicht mehr in der ersten Konsole sondern in der zweiten Konsole ausgegeben bekommt... Jetzt kann man den Screen in den Hintergrund schieben und endlich Feierabend machen ;-)