Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Webserver/Gameserver - Writing PID - PHP-Question Maybe
Verfasser Nachricht
dungeonmaster
Gleisarbeiter
*

Beiträge: 33
Themen: 6
Registriert seit: Dec 2010
#1
Webserver/Gameserver - Writing PID - PHP-Question Maybe
Bin grad 'ein wenig' am Basteln an einem Webif - mag einfach meinen Leuten (windoofuser) keinen SSH-Account geben um Server zu starten, das wäre surreal anzunehmen dass die sich mit Syntax auseinandersetzen (und mit Screen, dtach, ...). Da code ich lieber an ein paar Wochenenden ein Interface als Jahrelang Konsolensupport zu machen. Übrigens - CFG/SCN/SAV/GRF-Management ist schon recht weit gediehen.

Ich Starte den/die Gameserver natürlich auch über ein Webinterface (derzeit SICHER nicht DAU-Konform, aber dafür vorgesehenZwinkern), schön und gut, funktioniert auch soweit ganz fein.

ABER - Damit meine (HTTP-)Session nicht abkackt musste ich '> /dev/null 2>&1' verwenden, sonst ist nämlich der Apache-Thread auf dem Server nach dem Launch tot. (Die Session für den Aktuellen Browser = stalled=Sanduhr, andere Browser auf dem selben Client funktionieren, session_destroy() hat nix geholfen)

- WIE finde ich nun die PID des Openttd-Prozesses raus (kein Schalter laut Doku um PID in ein File zu schreiben?), die wäre ganz hilfreich zum stoppen.

- Oder gibt es eine andere Möglichkeit den Gameserver zu killen, etwa via Openttd-Libs? (muss via PHP funktionieren)

- Vielleicht fehlt mir ein Kommandozeilen-Trick? Ansonsten würde ich versuchen nach einem Sleep ein "ps ax | grep "KOMMANDO" machen aber das fühlt sich auch dirty an?

Any tipps?

Technische Details:
- "passthru" - Commando im PHP-Script:
Code:
sudo -b -u openttd /usr/share/games/openttd_cpp/openttd -d 0 -D -g /home/openttd/.openttd/save/usa_1870_v0.2.sav -c /home/openttd/.openttd/openttd.cfg.usa -x > /dev/null 2>&1
- Gentoo Linux mit 2.6.31-Kernel - LAMP - 64bit
- Openttd + Chillis Patchpack

Further Development:

auf http://tt.unkompliziert.org hab ich den Gameserver und das EntwicklerCMS eingerichtet - derzeit maximal für Nerds interessant und ausserdem ist der FQDN grad net aktiv - mein Provider hat irgendwas an seinen DNS-Servern umgestellt. Klaro dass das eine GPL-Entwicklung ist.
Planung ersetzt Zufall durch Irrtum
09.05.2011, 19:45
Homepage Suchen Zitieren
killermoehre
Geschäftsführer
***

Beiträge: 623
Themen: 5
Registriert seit: Oct 2005
#2
RE: Webserver/Gameserver - Writing PID - PHP-Question Maybe
Die PID kann doch einfach über die Shell abgerufen werden.
http://stackoverflow.com/questions/24936...is-own-pid

killermoehre
09.05.2011, 22:21
Suchen Zitieren
dungeonmaster
Gleisarbeiter
*

Beiträge: 33
Themen: 6
Registriert seit: Dec 2010
#3
RE: Webserver/Gameserver - Writing PID - PHP-Question Maybe
Nette Idee aber die PID die $$ zurückgibt hat leider nix mit den PIDs zu tun die OpenTTD dann bekommt.

Hänge ich echo $$ ran und bekomme dann die PID 10877 existiert die in der Prozessliste gar nicht mehr ... Der Sudo-Prozess hat dann in dem Fall 10879 und openttd selbst 10880.

Und dass ich nicht einfach echo $$+2 machen kann sollte klar sein.

Scheint ich komme nicht um ps ax rum?





Planung ersetzt Zufall durch Irrtum
10.05.2011, 13:22
Homepage Suchen Zitieren
planetmaker
Tycoon
*****

Beiträge: 1.315
Themen: 25
Registriert seit: Oct 2008
#4
RE: Webserver/Gameserver - Writing PID - PHP-Question Maybe
(10.05.2011, 13:22)dungeonmaster schrieb: Scheint ich komme nicht um ps ax rum?

Alle Systeme, die ich kenne und die die PID eines OpenTTD-Servers für solche oder ähnliche Zwecke nutz(t)en, verwenden eben jene Lösung. Läuft nur ein Server ist es einfach, laufen mehrere, so könnte man die ggf. durch unterschiedliche config-dateinamen und -parameter oder unterschiedliche Namen der Binary unterscheiden:

ps xu | grep 'openttd' | grep -v 'grep' | awk '{print $2}'
[Bild: 4q27gcl]
Schreib Deine eigenen NewGRFs, KIs oder Skripte. Siehe dazu DevZone, NML und Tutorien
10.05.2011, 13:44
Suchen Zitieren
Eddi
Tycoon
*****

Beiträge: 4.073
Themen: 24
Registriert seit: Aug 2008
#5
RE: Webserver/Gameserver - Writing PID - PHP-Question Maybe
versuchs mal mit
Code:
openttd ... & PID=$! echo $PID

ggf. auch hilfreich:
Code:
wait $PID
(Dieser Beitrag wurde zuletzt bearbeitet: 10.05.2011, 13:50 von Eddi.)
10.05.2011, 13:45
Suchen Zitieren
dungeonmaster
Gleisarbeiter
*

Beiträge: 33
Themen: 6
Registriert seit: Dec 2010
#6
RE: Webserver/Gameserver - Writing PID - PHP-Question Maybe
@Eddi:

Kommt nur "Leerzeichen"/Nix raus, könnte am sudo davor liegen (Rückgabe in anderer Shell?). Bin leider nicht so der Konsolenjunkie. [EDITED]

@planetmaker

sudo -u openttd ps xu | grep 'openttd_cpp' | grep -v 'grep' | awk '{print $2}'

Nett, nett. Auch fein zu wissen, dass es offenbar so die gängige Praxis ist.

Danke Leute, werde nun einfach ps-variante ausbauen.
Planung ersetzt Zufall durch Irrtum
(Dieser Beitrag wurde zuletzt bearbeitet: 10.05.2011, 16:18 von dungeonmaster.)
10.05.2011, 16:17
Homepage Suchen Zitieren
michi_cc
Gleisarbeiter
*

Beiträge: 58
Themen: 0
Registriert seit: May 2008
#7
RE: Webserver/Gameserver - Writing PID - PHP-Question Maybe
(10.05.2011, 16:17)dungeonmaster schrieb: Kommt nur "Leerzeichen"/Nix raus, könnte am sudo davor liegen (Rückgabe in anderer Shell?). Bin leider nicht so der Konsolenjunkie.

Die Befehle von Eddi in ein Shell-Skript und das dann mit sudo starten?
10.05.2011, 16:41
Suchen Zitieren
frosch
Geschäftsführer
***

Beiträge: 218
Themen: 1
Registriert seit: Mar 2007
#8
RE: Webserver/Gameserver - Writing PID - PHP-Question Maybe
Statt 'ps' und 'grep' hilft auch 'pidof openttd'.
Scheinwissen - Stolz, Selbstreflexion - Resignation
10.05.2011, 17:34
Suchen Zitieren
Eddi
Tycoon
*****

Beiträge: 4.073
Themen: 24
Registriert seit: Aug 2008
#9
RE: Webserver/Gameserver - Writing PID - PHP-Question Maybe
(10.05.2011, 16:17)dungeonmaster schrieb: @Eddi:

Kommt nur "Leerzeichen"/Nix raus, könnte am sudo davor liegen (Rückgabe in anderer Shell?). Bin leider nicht so der Konsolenjunkie. [EDITED]

vor dem $! muß zwingend eine Zeile mit & am Ende stehen. wie das mit "sudo" zusammenpaßt, weiß ich nicht.
(Dieser Beitrag wurde zuletzt bearbeitet: 10.05.2011, 18:30 von Eddi.)
10.05.2011, 18:29
Suchen Zitieren
dungeonmaster
Gleisarbeiter
*

Beiträge: 33
Themen: 6
Registriert seit: Dec 2010
#10
RE: Webserver/Gameserver - Writing PID - PHP-Question Maybe
Hab das probiert, aber selbst der Shellscript als root gibt mir nix retour.

Das dürfte aber evt. an "> /dev/null 2>&1" liegen, ansonsten würd er mir ausser der PID oder echos im Script auch die Ausgaben des Servers retournieren.

Trotzdem, das mit dem Script war ne guate, guate Idee (warum ich net selber auf sowas gekommen bin?)

Folgender Script tut nun vorerst was er soll (denk ich), er schmeisst mir nur die PID zurück.
Code:
#!/bin/bash CMD_AWK="/bin/awk" CMD_GREP="/bin/grep" CMD_PS="/bin/ps" PATH="/mnt/openttd/binary/" PARM="-d 0 -D -f -x -g $2 -c $3" # PARAMETER DEFINITION # v0.1 #$1=game_binary_folder #$2=sav #$3=cfg ${PATH}${1}/openttd $PARM > /dev/null 2>&1 $CMD_PS xu | $CMD_GREP "${PATH}${1}/openttd $PARM" | $CMD_GREP -v 'grep' | $CMD_AWK '{print $2}'


Planung ersetzt Zufall durch Irrtum
(Dieser Beitrag wurde zuletzt bearbeitet: 10.05.2011, 18:36 von dungeonmaster.)
10.05.2011, 18:35
Homepage Suchen Zitieren
Eddi
Tycoon
*****

Beiträge: 4.073
Themen: 24
Registriert seit: Aug 2008
#11
RE: Webserver/Gameserver - Writing PID - PHP-Question Maybe
(10.05.2011, 18:35)dungeonmaster schrieb: Hab das probiert, aber selbst der Shellscript als root gibt mir nix retour.

Code:
PARM="-d 0 -D -f -x -g $2 -c $3"
hier das "-f" entfernen

Code:
${PATH}${1}/openttd $PARM > /dev/null 2>&1
und hier stattdessen ein & ans Ende packen.

Dann sollte das mit dem $! passen.
(Dieser Beitrag wurde zuletzt bearbeitet: 10.05.2011, 19:03 von Eddi.)
10.05.2011, 19:01
Suchen Zitieren
dungeonmaster
Gleisarbeiter
*

Beiträge: 33
Themen: 6
Registriert seit: Dec 2010
#12
RE: Webserver/Gameserver - Writing PID - PHP-Question Maybe
OK! Vollkommen richtig! Parameter -f entfernt, nun funzts.

EDIT: Ok, das mit dem Stattdessen hab i nun richtig verstanden.

Code:
#!/bin/bash PATH="/mnt/openttd/binary/" PARM="-d 0 -D -x -g $2 -c $3" # PARAMETER DEFINITION # v0.1 #$1=game_binary_folder #$2=sav #$3=cfg ${PATH}${1}/openttd $PARM > /dev/null 2>&1 & echo $!

Thx@All

EDIT 2: PATH sollte man in Shellscripten net umbedingt verwenden bin i grad draufkommen
Planung ersetzt Zufall durch Irrtum
(Dieser Beitrag wurde zuletzt bearbeitet: 10.05.2011, 19:33 von dungeonmaster.)
10.05.2011, 19:27
Homepage Suchen Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  TT-MS.de Gameserver Ammler 18 8.678 28.09.2007, 13:34
Letzter Beitrag: Ammler
  Forumseigener Gameserver? bugfix 3 2.055 13.01.2006, 23:40
Letzter Beitrag: pETe!

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste

Kontakt | Transport Tycoon Main Station | Nach oben | Archiv-Modus | RSS-Synchronisation