Screen: disconnecten zonder terminal te sluiten

January 4th, 2002 by Rob


Je kent het wel‚ je wilt op je co-located machine mysql + php + apache installeren. het downloaden duurt eeuwen en daarna gaat ‘make install’ bij de installatie vragen stellen. Je kunt het dus niet in de background draaien !

Heb je kabel dan laat je het lijntje lekker open staan‚ bel je echter in dan wordt zo’n installatie een dure grap. Het programma screen is de oplossing.
[pagebreak]
Hieronder een testcase. de verdere toepassingen kun je zelf wel bedenken.

installeer screen

Shell:

# /usr/ports/sysutils/screen/make install distclean

start screen nu met het volgende commando

Shell:

# screen -mS Screenname

je zit nu in de “screen shell” start het programma top

Shell:

# top

nu gaan we de verbinding netjes verbreken om er voor te zorgen dat top door blijft draaien
druk hiervoor de volgende toets combinaties
Ctrl + a
d

de d staat hier voor detach

je bent nu terug in je eigen bash shell verbreek de modem verbinding of log in iedergeval helemaal af van de server.

bel opnieuw in en maak een ssh/telnet verbinding met de colocated machine.
je moet weer aanloggen als dezelfde user als voorheen (Root is ons geval)

type dan

Shell:

# screen -r

je bent nu weer terug in het programma top.

je kunt dit afsluiten door ‘q’ in te drukken.

Je kunt zelf vast legio situaties bedenken waarin dit erg handig is. de meest bekende is vast portupgrade. Hiermee kun je al je packages in een keer updaten. de upgrade kan echter wel uren duren. Tussendoor worden er vragen gesteld‚ je kunt portupgrade -ra dus niet in de background draaien. Dit is de oplossing ! Draai het in een screen‚ sluit de boel af‚ kijk een paar uur later weer een beantwoord de vragen. Ga lekker slapen en ga de volgende ochtend nog even een aantal vragen beantwoorden. dit doe je net zolang tot de upgrade af is. Het nadeel aan deze methode is: Als je niet regelmatig kijkt of portupgrade nog vragen heeft kan een upgrade wel een aantal dagen in beslag nemen. Omdat portupgrade staat te wachten op antwoorden van de gebruiker.

Leave a Reply

13 Responses to “Screen: disconnecten zonder terminal te sluiten”

  1. Comment by Anonymous

    Mocht je meerdere screens hebben draaien dan kun je met screen -x kijken welke screens er draaien. En met screen -r Screenname connect je weer naar het gewenste screen.

    Succes allemaal.

  2. Comment by Anonymous

    Bedankt voor deze nuttige informatie : ) dit was wat ik nodig had.. niet voor ports maar meer voor BitchX..

    sPiNe ook bedankt natuurlijk voor het “uitwijzen” van deze howto :)

  3. Comment by Anonymous

    Screen Rox0rz :-)

  4. Comment by Anonymous

    Voor de mensen die FreeBSD 4.7 gebruiken, hij staat in /usr/ports/misc/screen
    Absolute aanrader!

  5. Comment by Anonymous

    Maar het kan nog mooier met een [b].screenrc[/b] in je homedir.

    [viper@cyanide viper]$ cat .screenrc

    [code]
    # $HOME/.screenrc

    startup_message off

    # These apps are started up on default
    # when a new screen-session is started.

    screen -t BitchX 1 BitchX $USER irc.xs4all.nl
    screen -t mail 2 mutt
    screen -t top 3 top -s1 -ocpu

    # Shells Shells Shells
    screen 4
    screen 5
    screen 6
    screen 7
    screen 8

    # This is the initial window.
    select 1

    # k1 = [F1] etc
    bindkey -k k1 select 1
    bindkey -k k2 select 2
    bindkey -k k3 select 3
    bindkey -k k4 select 4
    bindkey -k k5 select 5
    bindkey -k k6 select 6
    bindkey -k k7 select 7
    bindkey -k k8 select 8
    [/code]

  6. Comment by Anonymous

    Nog een tip:
    Ik las op een site (http://www.mkaz.com/reference/unix_screen.html) hoe je de ctrl-a kon vervangen door bijvoorbeeld ctrl-w. Ik vond dit vooral handig omdat ik gewend ben met ctrl-a naar het begin van de regel te gaan…
    Alleen ff:
    escape “^Ww”
    toevoegen aan je .screenrc…

  7. Comment by niels

    Ehhmm bij 4.7 staat de port niet meer in sysutils maar in misc

  8. Comment by krazzy

    leuke tool, werkt dit ook i.c.m Make World….dus in een screen een make world doen en dan afsluiten :) ? Het lijkt mij wel..maar heeft iemand er ervaring mee?

  9. Comment by denz

    Screen is Your Friend[tm].

    overigens, xychix, met screen -ls kun je een lijst krijgen met open sessies. Met -x open je gelijk de sessie als er maar 1 is.

    krazzy, inderdaad, screen starten, make world, Ctrl-A/d, terug in ‘normale’ terminal sessie, ssh client afsluiten, morgen terugkomen, screen -r en kijken of de wereld gemaakt is.

  10. Comment by Murf

    Bijna Denz, screen -x *kopieert* je huidige screen sessie… screen -r pakt, als er maar 1 detached sessie is, deze op. screen -rd doet hetzelfde, maar detached ‘m eerst… (screen -r pakt nooit attached screens)

  11. Comment by TnT

    make world doen in een draaiende omgeving is hoe dan ook een domme actie..
    Om het dan ook nog in een screen te draaien is niet veel slimmer..

    make buildworld is een ander verhaal.. dat kan natuurlijk wel..
    make world installeert ook gelijk de nieuwe world en dit wordt heel erg afgeraden in multiuser mode.. ik heb er al regelmatig problemen mee gehad in multiuser. Gewoon omdat er dan dingen in gebruik zijn.
    Doe je dit ook nog eens in een screen dan heb je kans dat screen ook nog wat libs ofzo in gebruik heeft die dan niet door de nieuwere versies overschreven kunnen worden.
    Eerst terug naar single user voor je make installworld gaat doen en make installkernel.
    Maar een make buildworld en make buildkernel kunnen natuurlijk perfect in een screen worden gedraait..

  12. Comment by xychix

    krazzy ik doe vaak een
    cd /usr/src && make buildworld && make buildkernel KERNCONF=BLA in een screen.
    het installen van de world en kernel is echter een andere zaak.. dat zou ik zeker niet in een screen doen.

    (het is me overigens al wel meerdre keren gelukt.. maar op eigen risico!!!)

  13. Comment by FST777

    Wil je make installworld in een screen oid doen (wat soms een must is als je een co-located server hebt) dan moet je er iig voor zorgen dat er bijna niks meer draait. Dingen die heel erg fout kunnen gaan: mysqld, httpd, xorg / xfree86, cups, etc….

    Normaal gesproken gebruik ik hier ook wel screen voor, met alleen sshd actief. De rest gewoon uitgooien (kill -TERM) en je kunt gaan. ps -axl is je vriend in deze.

SEO Powered by Platinum SEO from Techblissonline