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 [b]screen[/b] 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
[/shell]
start screen nu met het volgende commando
[shell]# screen -mS Screenname
[/shell]
je zit nu in de “screen shell” start het programma top
[shell]# top
[/shell]
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
[/shell]
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.
Anonymous says
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.
Anonymous says
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 🙂
Anonymous says
Screen Rox0rz 🙂
Anonymous says
Voor de mensen die FreeBSD 4.7 gebruiken, hij staat in /usr/ports/misc/screen
Absolute aanrader!
Anonymous says
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]
Anonymous says
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…
niels says
Ehhmm bij 4.7 staat de port niet meer in sysutils maar in misc
krazzy says
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?
denz says
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.
Murf says
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)
TnT says
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..
xychix says
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!!!)
FST777 says
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.