[Crontab] Port down --> kill and restart procces

Pagina: 1
Acties:
  • 47 views sinds 30-01-2008

  • Noodels
  • Registratie: Februari 2004
  • Niet online
Ik heb een Counter Strike server draaien en nu gebeurt het weleens dat de HLDS geen zin meer heeft en er dus uiklapt.

Daar heb ik een scriptje voor:

code:
1
2
3
4
5
#!/bin/bash
if [ `ps --no-headers -l -C hlds_run | wc -l` -eq 0 ]; then
  echo HLDS Server not running... starting...
  /data/hlds/startserver.sh
fi


Dat werkt naar behoren maar nu gebeurt het wel eens dat het procces wel in "top"
voorkomt maar de "server" toch down is......

Dus nu wil ik een scriptje wat kijkt of de port te bereiken is en als dat niet het geval is dat dan het procces gekilled wordt en opnieuw wordt gestart.

Nu weet ik wel een beetje hoe het werkt maar hoe kan ik:

1. kijken of die poort (27015) up is?
2. Hoe kill je een procces met zo`n script?

Of is er iemand die al zo`n script heeft en hem wel wil sharen? :9

  • lordgandalf
  • Registratie: Februari 2002
  • Laatst online: 13-02 15:00
nmap kan kijken of een poort open staat mischien dat je daar iets mee kan maken en een process killen kan met kill of killall (simpel he :P) bij kill geef je de PID mee en bij killall de processnaam

Steam: Profile / Socialclub: Profile / Uplay: minedwarf / Origin: lordgandalf3


  • PowerSp00n
  • Registratie: Februari 2002
  • Laatst online: 17-11-2025

PowerSp00n

There is no spoon

lordgandalf schreef op 20 mei 2004 @ 15:28:
nmap kan kijken of een poort open staat mischien dat je daar iets mee kan maken en een process killen kan met kill of killall (simpel he :P) bij kill geef je de PID mee en bij killall de processnaam
Vooral killall [processnaam] is leuk als je meerdere Counter-Strike servers draait ;).

  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 10:27
netstat -nlp|grep 0.0.0.0\:27015

Als je output krijgt dan weet je zeker dat de poort nog op listening staat en in de laatste kolom staat het PID nr van het proces dat luisterd. (mits je netstat als root uitvoerd)

[ Voor 10% gewijzigd door Jelmer op 20-05-2004 15:41 ]


  • lordgandalf
  • Registratie: Februari 2002
  • Laatst online: 13-02 15:00
PowerSp00n schreef op 20 mei 2004 @ 15:37:
[...]


Vooral killall [processnaam] is leuk als je meerdere Counter-Strike servers draait ;).
Ja okee maar het doet wat hij vraagt het killed het proces okee dat counterstrike allemaal het zelfde heten kan ik toch niks aan doen :P

Steam: Profile / Socialclub: Profile / Uplay: minedwarf / Origin: lordgandalf3


  • Noodels
  • Registratie: Februari 2004
  • Niet online
Euhm ik ben even aan het klooien geweest...
(Thx btw voor de reacties)

Maar ik kom niet verder dan kijken of de server aanstaat zo niet start.
Ik gebruik nu de volgende code:
code:
1
2
3
4
5
#!/bin/bash 
if [ $(netstat -a | grep -c 27015) = 0 ]; then 
    echo Server is niet te bereiken.......server wordt gestart!
    /data/hlds/startserver.sh
fi

Output 1 als de server aanstaat
Output 0 als de server uitstaat

In de startserver.sh staat:
code:
1
2
3
4
5
#!/bin/bash
LD_LIBRARY_PATH=/data/hlds:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
cd /data/hlds
su hlds -c 'screen -A -m -d -S hlds ./hlds_run -game cstrike -noipx +maxplayers 13 +map fy_iceworld +port 27015 +ip 192.168.2.11'

Maar ik moet alleen nog het stukje dat hij eerst het procces beeindigd

Moet het dan zoiets worden?
code:
1
2
3
4
5
6
#!/bin/bash 
if [ $(netstat -a | grep -c 27015) = 0 ]; then 
echo Server is niet te bereiken.......server wordt gerestart!
kill [hlds] 
/data/hlds/startserver.sh
fi

Daarbij komt dus dat "screen" ook moet worden beeindigd.....
(Ik heb alleen mijn cs server als screen procces draaien)

  • Noodels
  • Registratie: Februari 2004
  • Niet online
*schopje*?!

  • lordgandalf
  • Registratie: Februari 2002
  • Laatst online: 13-02 15:00
je moet de PID van de desbtreffende server weten en dan kan je kill PID doen of als je maar 1 server draait killall procesnaam

Steam: Profile / Socialclub: Profile / Uplay: minedwarf / Origin: lordgandalf3


  • Noodels
  • Registratie: Februari 2004
  • Niet online
Maar de PIOD verschilt elke keer en ik draai maar 1 server dus kan ik het amkkelijk met de killall doen.

Maar hoe verwerk ik dat in het script?

Moet het dan zoiets worden?
code:
1
2
3
4
5
6
7
#!/bin/bash 
if [ $(netstat -a | grep -c 27015) = 0 ]; then 
echo Server is niet te bereiken.......server wordt gerestart!
kill [hlds]
kill [screen]
/data/hlds/startserver.sh
fi


En kan ik dan een "pauze inlassen van 2 seconden tot de proccesen echt dood zijn vooordat het startserver.sh script wordt geladen?

[ Voor 16% gewijzigd door Noodels op 29-05-2004 16:42 ]


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Euh.. dat is toch basic scripting werk? Heb je bijvoorbeeld de bash handleiding al eens er op na geslagen. Het voorbeeld wat je hierboven geeft lijkt redelijk kloppend; alleen werkt kill alleen met een PID, niet met procesnaam; dus maak van [hlds] even:
`ps --no-headers -C hlds|awk '{print $1}'`
en van van [screen] even:
`ps --no-headers -C screen|awk '{print $1}'`


Let op.. dit zijn heel erg vieze scripts die voor rare problemen kunnen zorgen zodra je gaat uitbreiden. Beter is het PID na opstarten weg te schrijven in /var/run.... verder kun je 2 seconden wachten met
sleep 2
:)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • Noodels
  • Registratie: Februari 2004
  • Niet online
Ja ik wist niet dat kill niet met de naam overweg kon dus sorry bout that :>

Maare je hebt het over "een PID na opstarten weg te schrijven in /var/run.... "

En hoe krijg ik dat in godsnaam voor elkaar?

  • lordgandalf
  • Registratie: Februari 2002
  • Laatst online: 13-02 15:00
als het goed is geeft hlds een pid terug bij het op starten en deze kunje met een pipe naar een bestand sturen dus hlds <hier je opties> > hldspid.txt
van te voren wel zorgen dat hldspid.txt niet bestaat/leeg is

Steam: Profile / Socialclub: Profile / Uplay: minedwarf / Origin: lordgandalf3


  • Noodels
  • Registratie: Februari 2004
  • Niet online
oke hij maakt de txt file aan maar wat bedoel je precies met een "pipe" ik hoor nu echt termen waar ik nog nooit van heb gehoord.... :?

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Als je in de manpage van bash zoekt op "pipe", komt daar genoeg informatie over, makkelijk te vinden en basiskennis eigenlijk, waarvan we verwachten dat je dat zelft uitzoekt min of meer, zie ook NOS policy - updated 01/04/03 :)
Met de tips in dit topic en de manpage van bash en de bash scripting guide moet je er wel uit kunnen komen denk ik.
Succes!
Pagina: 1

Dit topic is gesloten.