shell_exec() <- Starta cs server.

Permalänk
Medlem

shell_exec() <- Starta cs server.

Vill starta min cs server via php så ska använda shell_exec men det funkar inte.
Kör en fil som heter start_war1 den fungerar via terminalen men inte när jag kör shell_exec.

##FILER

#starta_cs.php
<?php
$output = shell_exec("./start_war1");
echo "<pre>$output</pre>";
?>

#start_war1
cd servrar/
cd hlds_war1/
./hlds_run -game cstrike +maxplayers 12 -pingboost 3 +port 27015 +map de_inferno -autoupdate

##
Jag kanske är helt ute och cyklar här?

Permalänk

Har för mig att det är ngn inställning som måste ändras i php.ini för att man skall få köra shelle_exec i sina php-skript.

Permalänk
Medlem

borde inte vara det, shell_exec("apachectl restart"); funkar.

Permalänk
Medlem

ska ./ vara med då?

Visa signatur

mirkk

Permalänk

byt

"cd servrar/
cd hlds_war1/
./hlds_run ..."

mot

"/full/path/till/hlds/hlds_run ..."

Permalänk
Medlem

Vet inte om du menade "/servrar/hlds_war1/.." eller "/home/srv/servrar/hlds_war1/..."
Så testa båda man ingen fungerade.

Men när ja köra alt.2 i terminalen så fick jag ett felmeddelande, kanske är därför det inte funkade, eller hade felmeddelandet kommit upp i output då?

Felmeddelandet var detta:

[srv@localhost ~]$ /home/srv/servrar/hlds_war1/hlds_run -game cstrike +maxplayers 12 -pingboost 3 +port 27015 +map de_inferno -autoupdate
Invalid game type 'cstrike' sepecified.
mån aug 15 19:15:29 CEST 2005: Server Failed

Vilket är konstigt för cstrike är rätt och det funkar om jag kör min cd väg

Permalänk
Citat:

Ursprungligen inskrivet av okley
Vet inte om du menade "/servrar/hlds_war1/.." eller "/home/srv/servrar/hlds_war1/..."
Så testa båda man ingen fungerade.

Men när ja köra alt.2 i terminalen så fick jag ett felmeddelande, kanske är därför det inte funkade, eller hade felmeddelandet kommit upp i output då?

Felmeddelandet var detta:

[srv@localhost ~]$ /home/srv/servrar/hlds_war1/hlds_run -game cstrike +maxplayers 12 -pingboost 3 +port 27015 +map de_inferno -autoupdate
Invalid game type 'cstrike' sepecified.
mån aug 15 19:15:29 CEST 2005: Server Failed

Vilket är konstigt för cstrike är rätt och det funkar om jag kör min cd väg

Det beror antagligen på att hlds_run körs i fel mapp och därför inte kan hitta cstrike. Vad är felet med skriptet du använde först. Kan det vara så att apache inte har tillräckliga rättigheter för att köra hlds_run?

Permalänk
Medlem

okej det med fel namn köper jag, men det funkar ju inte när jag är i rätt map heller, och d me apache hur kan jag ge det rättigheter att köra hlds_run då?

Går det att fixa eller ta en bakväg?

Permalänk

Du kan ju göra det fult och bara köra en "chmod 777 hlds_run" som root eller något.

Permalänk
Medlem

Funkar inte iaf, + hlds_run ligger på min användare så kunde ge rättigheter därifrån.

Är inte att använda shell_exec() samma sak som att skriva direkt i terminalen?

Var iaf vad jag hade fått för mig men det funkar ju i terminalen så hade väll fel :/.

Permalänk

Får du inget felmedelande eller något. Exakt vad är det som händer / inte händer?

Du kan ju pröva att sätta suid på det där skriptet som startar servern. Om skriptet ägs av din använadre så kommer skriptet få alla rättigheter som du har.

Permalänk
Medlem

Hur sätter jag suid då?

Och jag får inget felmeddelande när jag kör via shell_exec får inget alls

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av okley
Hur sätter jag suid då?

chmod +s

Visa signatur

Hej

Permalänk
Medlem

Får ju ett felmeddelande om jag kör kod:

<?php
$output = shell_exec("/home/srv/servrar/hlds_war1/hlds_run +maxplayers 12 -game cstrike -pingboost 3 +port 27015 +map de_inferno -autoupdate");
echo "<pre>$output</pre>";
?>

Felmeddelandet är detta och när jag googlar det får jag bara massa tyska forum så det hjälper inte :/
##
Invalid game type 'cstrike' sepecified.
tis aug 16 15:37:08 CEST 2005: Server Failed
##

Men LazyDroog sa ju att det bara var för att det är fel map, men det är inte fel map, drog till och med in filen i terminalen och den där länken skapades åt mig.

Skrivet av LazyDroog:

Det beror antagligen på att hlds_run körs i fel mapp och därför inte kan hitta cstrike. Vad är felet med skriptet du använde först. Kan det vara så att apache inte har tillräckliga rättigheter för att köra hlds_run?

Så vad kan d vara?

Permalänk

#starta_cs.php <?php $output = shell_exec("./start_war1"); echo "<pre>$output</pre>"; ?> #start_war1 cd /home/srv/servrar/hlds_war1/ ./hlds_run -game cstrike +maxplayers 12 -pingboost 3 +port 27015 +map de_inferno -autoupdate

starta_cs.php och start_war1 ska ligga i samma mapp. start_war1 måste vara ägd av din användare och ha suid flaggan på. Har du testat så här?

Permalänk
Medlem

Tack, det löste det problemet men sen så fick jag ett nytt meddelande så jag fick "chmod 777 hlds_i386" Så när jag startade då så står scriptet bara och laddar och laddar...

Och där vart den klar nu kom samma error igen.
Nu gjorde den ju nåt mer iaf.
##########
Invalid game type 'cstrike' sepecified.
tis aug 16 17:21:12 CEST 2005: Server Failed

Tänkte även på en sak, eftersom shell_exec tar emot information efter den har kört commandot, borde den inte stå och ta emot(och ladda och ladda) hur länge som helst, för cs servern skickar ju massa info hela tiden om nån connectar osv.´

#Edit
Har ni gjort om laddningen ett X antal gånger och inte fått error, kan den inte vara så som jag skrev här ovan ?
Fast då borde ju servern starta och den visas inte online :/

Permalänk

http://se.php.net/manual/sv/function.exec.php

Citat:

se.php.net
Not: If you start a program using this function and want to leave it running in the background, you have to make sure that the output of that program is redirected to a file or some other output stream or else PHP will hang until the execution of the program ends.

Permalänk
Medlem

Hittade ett command under shell_exec på php.net och det stod att den körde i backgrunden ocg även gav en ett ID för processen.

Så testade det och jag får ett id och om jag med ett annat script kollar om processen är startad visar d '1' men cs servern startas inte, vet inte om den bara tror att den startar eller något.

Använder detta nu iaf....

<?php
//Run linux command in background and return the PID created by the OS
echo run_in_background("./start_war1");
function run_in_background($Command, $Priority = 0)
{
if($Priority)
$PID = shell_exec("nohup nice -n $Priority $Command > /dev/null & echo $!");
else
$PID = shell_exec("nohup $Command > /dev/null & echo $!");
return($PID);
}
?>