[PHP] .sh aanroepen om een COD4 server te starten in screen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Toettoetdaan
  • Registratie: Juni 2006
  • Laatst online: 23-08 15:00
Goed waar zal ik beginnen, ik ben behoorlijk nieuw in PHP ook al heb ik wel wat ervaring met C.
Nu wou ik via de browser een COD4 server kunnen sluiten en starten, het probleem is echter dan hij alleen wil sluiten en niet meer wil starten.
Voor het starten en sluiten heb ik de scripts: start.sh en stop.sh:

start.sh
code:
1
2
3
4
5
6
7
8
9
10
#! /bin/sh
echo "Starting cod4 server from /srv/cod/cod4 with screen name 'cod4'"

#change working directory
cd /srv/cod/system

#run the server in a screen session
screen -dmS cod4 /srv/cod/system/cod4_lnxded-c +set dedicated 2 +set fs_homepath /srv/cod/cod4 +set net_ip 94.75.209.179 +set net_port 28960 +exec default_mp.cfg +map_rotate

echo "end shell"


stop.sh
code:
1
2
3
4
5
6
7
#! /bin/bash
echo "Stoping cod4 server from /srv/cod/cod4 with screen name 'cod4'"

#open the cod4 screen session and send "quit [enter]"
screen -S cod4 -p 0 -X eval 'stuff quit\015'

echo "end shell"

Deze scriptje gebruik ik om de server te restarten, en dat werkt dus prima. (ik zou deze 2 scriptjes ook weer in een .sh file kunnen zetten, met een "wait 3" ertussen. die zou ik dan restart.sh kunnen noemen maar dat terzijde)

Aan PHP heb ik stop.php en start.php:
stop.php
PHP:
1
2
3
4
<?php
$output = shell_exec('../../../srv/cod/cod4/stop.sh');
echo "<pre>$output</pre>";
?>


start.php
PHP:
1
2
3
4
<?php
$output = shell_exec('../../../srv/cod/cod4/start.sh');
echo "<pre>$output</pre>";
?>


De uitvoer van stop.php in de browser is:
Stoping cod4 server from /srv/cod/cod4 with screen name 'cod4'
end shell
Waarbij de server ook daadwerkelijk gestopt word. als hij al gestopt is zegt hij: "No screen session found."

Nu komen we bij mijn probleem,
De uitvoer van start.php in de browser is:
Starting cod4 server from /srv/cod/cod4 with screen name cod4'
end shell
De scripten worden dus helemaal uitgevoerd maar de server word dus niet opgestart.
Als ik screen -r doe is cod4 ook niet aanwezig.
Het heeft vast iets met PHP rechten te maken of met tty/ssh maar ik zou echt niet weten wat pressies...

Nog wat PHP setting:
- save_mode is of.
- max_runtime is 30 (default)
- max gehuegen verbuik is van 128 naar 512 gezet. (is niet nodig, was alleen voor het uitsluiten van het probleem, maar ter informatie een cod4 server trekt zoon 380mb)
Veder is de user die PHPen dus ook de website's afhandelt dezelfde als die de servers start.
ik weet dat het onveilig is, maar ik werd gek van telkens rechten goed zetten tijdens het deven
Wie snapt er iets van? [lees: help!] 8)7

Acties:
  • 0 Henk 'm!

  • TJVB
  • Registratie: Januari 2008
  • Laatst online: 10-09 10:37
Werk het wel als je het sh script vanaf de commandline start?
En staat er wat in de log files van COD4?

Acties:
  • 0 Henk 'm!

Verwijderd

Dit lijkt mij geen probleem binnen PHP.
Maar iets met dat sh script.

Acties:
  • 0 Henk 'm!

  • CRiMiNaL
  • Registratie: Mei 2002
  • Laatst online: 10-01-2024

CRiMiNaL

Witlof ^^

Dit lijkt me inderdaad niet een PHP probleem.
Wat TJVB al zegt, check de logfiles van die server, word ie ook echt gestart.
Ik vermoed van wel, maar dat hij dan ook weer gekilled word zodra PHP de shell sessie sluit.

Of hij geeft wel een error, in de logfile.

[ Voor 9% gewijzigd door CRiMiNaL op 28-05-2010 15:26 ]

... MMORPG Addict.


Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 06:33
Eens met Typnix. Verder denk er aan om een absolute path te gebruiken voor iets als dit en check of de PHP gebruiker wel genoeg rechten heeft om de Cod4 server op te starten.

Acties:
  • 0 Henk 'm!

  • Toettoetdaan
  • Registratie: Juni 2006
  • Laatst online: 23-08 15:00
De SH scripten zelf werken al zoon 2 jaar vanuit de command line (via putty) dus dat zal het niet zijn.
Ik ben even de log bekijken van de server :P

Acties:
  • 0 Henk 'm!

  • ufear
  • Registratie: December 2002
  • Laatst online: 10-09 12:35
Ik zou iets als libssh2 gebruiken om een SSH sessie naar je server te starten, niets geen gezeur met webservers die rechten hebben op dingen waar ze niet bij zouden moeten kunnen. Gewoon een 'echte' shell sessie waarin dit gegarandeerd wel goed gaat!

http://kevin.vanzonneveld...ssh_connections_with_php/

[ Voor 15% gewijzigd door ufear op 28-05-2010 15:29 ]


Acties:
  • 0 Henk 'm!

  • Toettoetdaan
  • Registratie: Juni 2006
  • Laatst online: 23-08 15:00
De logfile van de server word dus niet aangepast als start.php word uitgevoerd.
om hem een kans te geven had ik ook nog even "sleep 10" toegevoegd aan het einde van start.sh, maar dat hielp niet.

Dus daar zit het niet in, het hele Screen command word genegeerd...

@ufear, dat ziet er wel goed uit, zal me eens inlezen. (ik zie niet direct hoe de authenticatie gaat, ik zelf gebruik een key file)
@Manuel, de PHP gebruiker en de COD4 server gebruiker zijn dezelfde ;)

[ Voor 8% gewijzigd door Toettoetdaan op 28-05-2010 15:45 ]


Acties:
  • 0 Henk 'm!

  • CRiMiNaL
  • Registratie: Mei 2002
  • Laatst online: 10-01-2024

CRiMiNaL

Witlof ^^

Onder welke user draait je webserver ?
Wat zijn de rechten op die screen executable?

... MMORPG Addict.


Acties:
  • 0 Henk 'm!

  • Toettoetdaan
  • Registratie: Juni 2006
  • Laatst online: 23-08 15:00
@CRiMiNaL,
De webserver draaid onder user "server"
Evenals dat de cod4server draaid onder user "server"
(dezelfde user dus, heb ooit eens www-data gewurgd)

Beide .sh bestanden hebben de rechten 755

Acties:
  • 0 Henk 'm!

Verwijderd

Ik ken COD4 niet en ik weet dus ook niet hoe je die behoort te starten stoppen, maar wat me wel opvalt is dat je twee verschillende script interpreters gebruikt (de ene met `sh` en de andere met `bash`). Ik snap die inconsistentie niet.

moet je niet
code:
1
screen -d -m -S
gebruiken i.p.v.
code:
1
screen -dmS

[ Voor 15% gewijzigd door Verwijderd op 28-05-2010 17:06 ]

Pagina: 1