Toon posts:

[linux]-[SCREEN killen/stoppen wil niet lukken]

Pagina: 1
Acties:

Verwijderd

Topicstarter
Dit staat in mijn init.d om CS:S te starten. En het zou hem ook moeten kunnen stoppen. Echter blijkt het kill commando niet goed te zijn. Het commando werkt ook niet als ik het in putty in voer.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/sh
# description: Counter-Strike: SOURCE Dedicated Server
# chkconfig: 2345 99 00

case "$1" in
'start')
    sleep 1
    cd /root/hlds_l
    screen -A -m -d -S css-server ./srcds_run -game cstrike +map street_war -maxplayers 20 -autoupdate
    touch /var/lock/subsys/CSSserver
    ;;
'stop')
    kill `screen -ls |grep srcds_run |awk -F . '{print $1}'|awk '{print $1}'`
    ;;
*)
    echo "Usage: $0 { start | stop }"
    ;;
esac
exit 0


Ik kan de source server alleen killen via webmin en dan naar running services ofzo gaan en daar op de PID klikken en dan kill doen. Kan ik ergens uit een of ander logje uitlezen welk commando webmin nou heeft gebruikt? om dan zo dus dat commando in de bovenstaande code te zetten???

Wat ik verder ook nog geprobeerd heb is om een script te maken wat weer het screem weer atached en dan in de console van CS een quit of exit geeft. Enkele dingen die dan weer mis gaan zijn dat als ik -autoupdate heb aan staan hij de server juist herstart en dan krijg je gekke error's want webmin denkt dat die uit staat. dus als je dan op start klikt dan draaien er 2 CS servers.. :?

kan iemand me verder helpen?

Verwijderd

Probeer eens "kill -9" ;)

Verwijderd

Topicstarter
Maar goed dat ik weer eerst ging googlen he grapjas ;)

code:
1
Using kill -9 on a process is like just hitting the power button on your running PC.


:/ :/ :/

  • zomertje
  • Registratie: Januari 2000
  • Laatst online: 23:25

zomertje

Barisax knorretje

Als het niet anders kan dan moet het maar denk ik altijd. Kill -9 moet je niet standaard gebruiken maar als je proces niet wil stoppen heb je soms geen andere optie. Hoe denk je dat je systeem met dezelfde processen omgaat als je hem reboot?

Maar ik mep ook mensen die standaard met kill -9 een proces willen stoppen.

het ultieme jaargetijde.... | #!/usr/bin/girl | Art prints and fun


  • Blaasvis
  • Registratie: November 2001
  • Laatst online: 13:48

Blaasvis

Cidora \o/

kill -9 is de laatste optie, dat is gewoon hardhandig het process afschieten.
Soms moet je, je kunt niet altijd netjes elk process afschieten.

Freedom is everything you need ; <moto-moi|afk> ik verkloot het gewoon nooit :P


Verwijderd

Topicstarter
Hoe luid het hele commando dan? Want ik neem aan dat er nog wat achter kill -9 moet staan.. ? Het is niet zo dat het het kill commando wat ik heb niet werkt.. maar het is niet juist ingevoerd. er zit een fout in. Hij geeft gewoon een lijstje met syntaxes die ik achter kill moet zetten...

Verwijderd

waarschijnlijk wil je greppen op 'css_server', niet op 'srcds_run'.

De -S parameter van screen bij het starten is nl. voor de sessienaam, en die krijg je te zien bij 'screen -ls'. Voorbeeldje van mijn eigen screen-sessie:

code:
1
2
3
4
geert@lawine:~$ screen -ls
There is a screen on:
        15459.pts-23.lawine     (Detached)
1 Socket in /var/run/screen/S-geert.


(nu gebruik ik geen -S bij mijn screen sessie maar de default is [tty.hostname] wat je hierboven dus terugziet)

Met dat
code:
1
screen -ls |grep srcds_run |awk -F . '{print $1}'|awk '{print $1}'

vis je dat getal, het process-id van je screen sessie eruit en dat voer je aan 'kill'.

[ Voor 19% gewijzigd door Verwijderd op 02-12-2005 10:54 ]


Verwijderd

Topicstarter
Verwijderd schreef op vrijdag 02 december 2005 @ 10:50:
waarschijnlijk wil je greppen op 'css_server', niet op 'srcds_run'.

De -S parameter van screen bij het starten is nl. voor de sessienaam, en die krijg je te zien bij 'screen -ls'. Voorbeeldje van mijn eigen screen-sessie:

code:
1
2
3
4
geert@lawine:~$ screen -ls
There is a screen on:
        15459.pts-23.lawine     (Detached)
1 Socket in /var/run/screen/S-geert.


(nu gebruik ik geen -S bij mijn screen sessie maar de default is [tty.hostname] wat je hierboven dus terugziet)

Met dat
code:
1
screen -ls |grep srcds_run |awk -F . '{print $1}'|awk '{print $1}'

vis je dat getal, het process-id van je screen sessie eruit en dat voer je aan 'kill'.
Dat had ik ook al bedacht... maar dat getal veranderd steeds nadat hij opnieuw start ;)

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Verwijderd schreef op vrijdag 02 december 2005 @ 10:50:
Hoe luid het hele commando dan? Want ik neem aan dat er nog wat achter kill -9 moet staan.. ? Het is niet zo dat het het kill commando wat ik heb niet werkt.. maar het is niet juist ingevoerd. er zit een fout in. Hij geeft gewoon een lijstje met syntaxes die ik achter kill moet zetten...
Is je manpage van kill stuk? ;)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Wilke
  • Registratie: December 2000
  • Laatst online: 20:29
Verwijderd schreef op vrijdag 02 december 2005 @ 10:35:
code:
1
Using kill -9 on a process is like just hitting the power button on your running PC.
...maar dan wel alleen voor dat proces. Met een normale 'kill' wordt gewoon een signaal naar het programma gestuurd dat het moet afsluiten. Het programma kan dan nog zorgen dat bv. geopende bestanden e.d. in een consistente toestand worden gebracht voordat het prog zichzelf afsluit. Als een programma echt "hangt", kan het gebeuren dat dit ook niet meer werkt.

Kill -9 betekent gewoon dat het betreffende proces per direct geen CPU-tijd meer krijgt, al het geheugen dat was toegewezen aan dat programma wordt domweg weer vrijgegeven, alle geopende I/O-descriptors (files, netwerk-verbindingen etc.) worden dichtgegooid, en het proces-ID wordt verwijderd uit de proceslijst. Het programma zelf kan op geen enkele wijze hier iets aan doen en heeft dit ook niet eens door. Het nietige bestaan van het proces is gewoon per direct opgeheven, en that's it....

Waarom dit soms niet zo'n goed idee is?

Als je dit doet bij programma's die shared memory gebruiken (dat is bv. een optie bij MySQL en Apache), worden eventuele locks op het shared gedeelte domweg vrijgegeven. Meestal betekent het houden van een lock op shared geheugen dat het proces iets aan het doen is met dat shared memory, en dat het zich dus waarschijnlijk in een inconsistente toestand bevind. Vandaar dat 'kill -9' op een MySQL-server niet zo'n briljant idee is: zowel database (files) als shared memory kunnen dan corrupt raken. Het is dus inderdaad een paardemiddel wat je meestal niet wilt gebruiken. Tenminste niet bij processen die continu naar disk schrijven en/of geheugen delen met andere processen.

Bij een CS-server zal waarschijnlijk niet zoveel mis gaan als je 'kill -9' doet. Hooguit zul je eventuele tijdelijke bestanden handmatig moeten weggooien. En ik weet niet of het ding continu stats schrijft naar een of andere (log)file, maar zoiets _kan_ dan ook kapot gaan.

Verwijderd

Verwijderd schreef op vrijdag 02 december 2005 @ 11:34:
Dat had ik ook al bedacht... maar dat getal veranderd steeds nadat hij opnieuw start ;)
Ja, da's normaal. Maar in je opstart/afsluit script gaat de 'kill' van je screen niet goed omdat de
'screen -ls | grep |awk' combo geen getal (het pid voor je kill commando) oplevert omdat je grept op het verkeerde. Lees mijn post hierboven nog eens goed door. En kijk in de manpage van screen eens naar de betekenis van alle switches die gebruikt worden in je script.

  • Luqq
  • Registratie: Juni 2005
  • Laatst online: 08-02 15:37
Probeer deze eens ;) wel beetje uitgebreid maar het is alles wat je nodig hebt!
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/bin/sh
# SRCDS init/update script
# 2/12/2005 Luqq

PATH=/bin:/usr/bin:/sbin:/usr/sbin

# Verander hier even je variabelen naar smaak ;)
USERNAME="" # Steam User
PASSWORD="" # Steam Password
DESC="Counterstrike Source Dedicated Server" # Description
DIR="/local/servers/srcds/" # Install directory of srcds.
NAME="srcds" # name used for screen running the server
UNAME="srcds_update" # name used for screen when updating
PARAMS="-game cstrike +map street_war -maxplayers 20 -autoupdate" # parameters
GAME="cstrike" # Game used for updating.
DAEMON="$DIR/srcds_run" # Daemon

case "$1" in
 start)
   echo "Starting $DESC: $NAME"
   if [ -e $DIR ];
   then
    cd $DIR
    screen -d -m -S $NAME $DAEMON $PARAMS
   else echo "No such directory: $DIR!"
   fi
   ;;

 stop)
   if [[ `screen -ls |grep $NAME` ]]
   then
       echo -n "Stopping $DESC: $NAME"
       kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
       echo " ... done."
   else
       echo "Coulnd't find a running $DESC"
   fi
   ;;

 restart)
   $0 stop
   $0 start
   ;;

 update)
   echo "Updating $DESC: $NAME"
   cd $DIR
   screen -d -m -S $UNAME ./steam -command update -game $GAME -username $USERNAME   -password $PASSWORD -dir $DIR
   ;;

 fullupdate)
   echo "Completely Updating $DESC: $NAME"
   cd $DIR
   screen -d -m -S $UNAME ./steam -command update -game $GAME -username $USERNAME   -password $PASSWORD -dir $DIR -verify_all
   ;;

 status)
   ps aux | grep -v grep | grep $DIR/srcds_ > /dev/null
   CHECK=$?
   [ $CHECK -eq 0 ] && echo "UP" || echo "DOWN"
   ;;
 
 updatestatus)
   ps aux | grep -v grep | grep $UNAME | grep steam > /dev/null
   CHECK=$?
   [ $CHECK -eq 0 ] && echo "UPDATING" || echo "NOT UPDATING"
   ;;

 *)
   echo "Usage: $0 {start|stop|restart|status|update|fullupdate|updatestatus}"
   exit 1
   ;;
esac

exit



Ik weet het, ik kauw teveel voor..maarja ;)

[ Voor 28% gewijzigd door Luqq op 02-12-2005 15:10 . Reden: edited naar Paul Nieuwkamp ;) ]


Verwijderd

Verwijderd schreef op vrijdag 02 december 2005 @ 10:35:
[...]

Maar goed dat ik weer eerst ging googlen he grapjas ;)

code:
1
Using kill -9 on a process is like just hitting the power button on your running PC.


:/ :/ :/
Ook graag gedaan hoor.. als je toch aangeeft dat ie niet wil killen na een aantal keer heb je niet veel redmiddelen meer.

/me houdt z'n mond verder maar

  • zomertje
  • Registratie: Januari 2000
  • Laatst online: 23:25

zomertje

Barisax knorretje

Verwijderd schreef op vrijdag 02 december 2005 @ 13:48:
[...]

Ook graag gedaan hoor.. als je toch aangeeft dat ie niet wil killen na een aantal keer heb je niet veel redmiddelen meer.

* zomertje houdt z'n mond verder maar
Niet te druk maken joh, hij bedoelt het niet slecht maar moet het ook allemaal nog een beetje goed doorkrijgen :)

@TS
Moet je niet minimaal drie opties maken?
Start, Stop, JeGaatEraanWantStopWerktNIetMeer?
(maar dan korter :P )

Nog een overweging, kun je niet beter je procesid opzoeken via ps en grep?

[ Voor 8% gewijzigd door zomertje op 02-12-2005 14:00 ]

het ultieme jaargetijde.... | #!/usr/bin/girl | Art prints and fun


  • jvdb1975
  • Registratie: Juli 2002
  • Laatst online: 27-01 23:05

jvdb1975

tsja.........

@zomertje: jij hebt ook al een tux keyboard en een bom sticker op de aan/uit knop? :p

  • Paul
  • Registratie: September 2000
  • Laatst online: 20:55
Aangezien we niet weten (wisten) wat er waarom niet gekilled kan worden (er staat alleen _dat_ het niet lukt, geen foutmeldingen en zo) is het beter om eerst te kijken waarom het niet lukt (process hangt, verkeerde pid, systax error) dan maar meten -9 erbij plakken.

Die quote van ts wil ik trouwens een beetje aanpassen:
Using kill on a process is like just hitting the power button on your (well configured) running PC, it signals your pc that it should stop. Using kill -9 is just like removing the powercable, it just stops the pc without warning
Tenzij we het uiteraard over AT-style pc's hadden, maar tegenwoordig heeft iedereen wel ATX :P

Dat scriptje van Luqq is een hele mooie :) alleen zou ik waarschijnlijk de parameter ustatus veranderen in updatestatus oid, met ustatus denk ik aan microstatus en vraag me dan af wat je nog kleiner kunt maken aan up / down 8)7 Dan kun je intern alsnog (ook) op "us" controleren of zo, als je niet van typen houdt :P
Ook de restart kun je beter veranderen in $0 stop gevolgd door een $0 start, want nu staat er code dubbel in :)

TS: Als je vaker dat soort scriptjes maakt (of voorgekouwd krijgt in een ouder topic ;) is het wel makkelijk debuggen als je de stappen die het scriptje doorloopt handmatig uitvoert. Wat krijg je bijvoorbeeld als je "screen -ls |grep srcds_run |awk -F . '{print $1}'|awk '{print $1}'" uitvoert? Als dat ook geen nuttige info uit komt haal je de achterste awk weg, vervolgens de 2e, en dan de grep (waardoor je dus alleen nog de screen oevrhoudt). Zo kun je vlot zien of er wel uit komt wat jij verwacht dat er uit komt :)

Als je je foutmelding (die je in [rml]ragingbull in "[ linux]-[ webconfig "Runing Services" app..."[/rml] wel neerzet) hier bij had gezet, dan hadden we je zo kunnen vertellen dat er een fout zat in je `sceen -blabla`, omdat kill loopt te zeuren dat er geen PID als parameter is opgegeven :)

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • Luqq
  • Registratie: Juni 2005
  • Laatst online: 08-02 15:37
Mja, dat had ik eerst ook maar vond ik zoveel typen :P kheb het allemaal ff veranderd, zou nu wel moeten werken =)

heb er btw de hlds versie van! zal ik die ook posten of is dat een beetje teveel van het goede ;)

heb ook een webinterface, maar het is echt heel lastig hoe je dat doet met permissies, bv: sudo(-u [user]), cgi met suExec etc..ben daar nog niet helemaal uit, iemand tips? Het werkt wel maar ik doe het met sudo en dat is TE onveilig om het te publiceren imo!

[ Voor 82% gewijzigd door Luqq op 02-12-2005 15:17 ]


Verwijderd

Topicstarter
Luqq schreef op vrijdag 02 december 2005 @ 13:45:
Probeer deze eens ;) wel beetje uitgebreid maar het is alles wat je nodig hebt!
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/bin/sh
# SRCDS init/update script
# 2/12/2005 Luqq

PATH=/bin:/usr/bin:/sbin:/usr/sbin

# Verander hier even je variabelen naar smaak ;)
USERNAME="" # Steam User
PASSWORD="" # Steam Password
DESC="Counterstrike Source Dedicated Server" # Description
DIR="/local/servers/srcds/" # Install directory of srcds.
NAME="srcds" # name used for screen running the server
UNAME="srcds_update" # name used for screen when updating
PARAMS="-game cstrike +map street_war -maxplayers 20 -autoupdate" # parameters
GAME="cstrike" # Game used for updating.
DAEMON="$DIR/srcds_run" # Daemon

case "$1" in
 start)
   echo "Starting $DESC: $NAME"
   if [ -e $DIR ];
   then
    cd $DIR
    screen -d -m -S $NAME $DAEMON $PARAMS
   else echo "No such directory: $DIR!"
   fi
   ;;

 stop)
   if [[ `screen -ls |grep $NAME` ]]
   then
       echo -n "Stopping $DESC: $NAME"
       kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
       echo " ... done."
   else
       echo "Coulnd't find a running $DESC"
   fi
   ;;

 restart)
   $0 stop
   $0 start
   ;;

 update)
   echo "Updating $DESC: $NAME"
   cd $DIR
   screen -d -m -S $UNAME ./steam -command update -game $GAME -username $USERNAME   -password $PASSWORD -dir $DIR
   ;;

 fullupdate)
   echo "Completely Updating $DESC: $NAME"
   cd $DIR
   screen -d -m -S $UNAME ./steam -command update -game $GAME -username $USERNAME   -password $PASSWORD -dir $DIR -verify_all
   ;;

 status)
   ps aux | grep -v grep | grep $DIR/srcds_ > /dev/null
   CHECK=$?
   [ $CHECK -eq 0 ] && echo "UP" || echo "DOWN"
   ;;
 
 updatestatus)
   ps aux | grep -v grep | grep $UNAME | grep steam > /dev/null
   CHECK=$?
   [ $CHECK -eq 0 ] && echo "UPDATING" || echo "NOT UPDATING"
   ;;

 *)
   echo "Usage: $0 {start|stop|restart|status|update|fullupdate|updatestatus}"
   exit 1
   ;;
esac

exit



Ik weet het, ik kauw teveel voor..maarja ;)
Deze werkt! Ik kan in Webmin stop en start gebruiken. Helaas wil Webconfig niet mee werken. Hij blijft bij webconfig op started staan. ik kan hem wel stoppen, dat zie ik in Webmin want daar verdwijnt het process. maar hij blijft op started staan in Webconfig. Zou ik dit moeten zoeken in de config van Webconfig of zit het hem in het script..?

dat laatste lijkt me niet het geval want hij werkt gewoon goed in Webmin..

@Paul Nieuwkamp: Je hebt gelijk de TS titel moet anders zijn. Sorry dat ik hierdoor het probleem minder duidelijk maak.

@Cowmike: het was idd niet bedoeld om je af te kraken. Ik ben niet zo'n ervaren Linux user. Ik vertouwde dat kill -9 niet helemaal om dat het naar mijn inzicht niet verwees naar de CS server. Ik ging dus googlen en kwam dus tegen dat het gewoon je pc afsluit. Ik dacht dat het een grap was. Sorry daarvoor!

@all of u: Bedankt dat jullie me zover op weg hebben geholpen..!

  • Luqq
  • Registratie: Juni 2005
  • Laatst online: 08-02 15:37
Ligt niet aan het script, als je hem start, dan stopt, en dan status gebruikt zegt hij echt dat hij down is hoor ;)
Pagina: 1