Omdat ik via 1 bak services op andere bakken wil aan/uit kunnen schakelen, heb ik inetd in de hand genomen en een php scriptje gemaakt. Als je connect naar mijn script, wordt er eerst ge-authenticate, etc. Daana worden de input commando's geparsed, en start of stop ik de service:
In /startstop/game/{gamenaam}/{username} staan symbolic links naar de init scripts van de servers. Het gaat om Unreal Tournament servers, en de links verwijzen naar de alom bekende ASU ucc.init scripts. De service op deze manier stoppen gaat perfect, maar het starten is een probleem, omdat de verbinding na het starten van de service en het uitvoeren van het PHP script niet automatisch closed.
Wat er gebeurt bij het stoppen van een UT server:
Dit ziet er dus goed uit.
Bij het starten van een UT server:
Ik krijg mijn commandprompt niet terug: de connectie wordt niet gesloten, terwijl het PHP script toch helemaal is uitgevoerd. Ik vermoed dus dat inetd de verbinding pas sluit als alle processen gestart door het script, ook gestopt zijn. Iets wat ik dus niet wil
. Als ik overigens ctrl-c na de startpoging is de server wel gestart.
Heeft iemand enig idee hoe ik dit kan oplossen?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
| // KNIP $path = "/startstop/game/" . $data['which'] . "/" . $data['username']; if (is_link($path) || is_file($path)) { $cmd = "/usr/bin/nohup $path " . $data['do'] . " >/dev/null 2>&1 &"; $ret = shell_exec($cmd); die ("+OK Attempted to " . $data['do'] . " server\n"); } else die ("-ERR Script not found\n"); // KNIP |
In /startstop/game/{gamenaam}/{username} staan symbolic links naar de init scripts van de servers. Het gaat om Unreal Tournament servers, en de links verwijzen naar de alom bekende ASU ucc.init scripts. De service op deze manier stoppen gaat perfect, maar het starten is een probleem, omdat de verbinding na het starten van de service en het uitvoeren van het PHP script niet automatisch closed.
Wat er gebeurt bij het stoppen van een UT server:
code:
1
2
3
4
| server:/scripts# echo "username=utserver&password=blablabla&action=server&which=ut&do=stop"\ | nc localhost adminservice +OK Attempted to stop server server:/scripts# |
Dit ziet er dus goed uit.
Bij het starten van een UT server:
code:
1
2
3
| server:/scripts# echo "username=utserver&password=blablabla&action=server&which=ut&do=start"\ | nc localhost adminservice +OK Attempted to start server |
Ik krijg mijn commandprompt niet terug: de connectie wordt niet gesloten, terwijl het PHP script toch helemaal is uitgevoerd. Ik vermoed dus dat inetd de verbinding pas sluit als alle processen gestart door het script, ook gestopt zijn. Iets wat ik dus niet wil
Heeft iemand enig idee hoe ik dit kan oplossen?
[ Voor 6% gewijzigd door Verwijderd op 07-09-2003 20:39 ]