Scripte per PHP starten

*cerox*

Lt. Commander
Registriert
Feb. 2005
Beiträge
1.357
Hallo zusammen,

ich bin gerade dabei, mir ein Webinterface zum Starten und Stoppen von Scripten zu bauen (Gameserver, TS2 zum Beispiel).

Die Scripte sollen als ein bestimmter User ausgeführt werden. In der Shell habe ich bisher als root immer:

Code:
su user -c /home/user/script

eingegeben, was auch gut funktioniert.

Als Webserver benutze ich XAMPP bzw. LAMPP. Dort möchte ich einen Befehl mit PHP an die Shell übergeben also z.B. mit:

Code:
<?php shell_exec("su user -c /home/user/script");?>

Leider funktioniert das überhaupt nicht, da unter dem Webserver der User "nobody" arbeitet und "su" kann ja nur als Root ausgeführt werden - also so, dass kein Passwort verlangt wird.

Kann mir jemand eine Alternativlösung nennen oder wie ich das sonst hinbekomme?
 
Wie wärs wenn du dem user auf den der Webserver läuft einfach die Rechte gibst um das Script zu starten.
 
Die dürfte er durch chmod 777 bereits haben; trotzdem geht es nicht.
 
von chmod 777 stand da nix, ist auch nicht gerade ne Glanzidee.
Du musst dran denken, dass es nicht reicht das Script mit den Rechten auszustatten.
Wenn das Script zum Beispiel den Gameserver startet muss der User bei den Files des GS auch die entsprechenden Rechte haben.

Alternativlösung:
Führe nichts direkt aus, schreib die Todos in ne Datenbank und lass dann als der entsprechende User per cronjob regelmäßig ein Script laufen was sich die todos zieht und ausführt.
dann kannste das auch viel einfacher auf mehrere Server ausweiten ohne überall die Software selber laufen lassen zu müssen.
 
Du musst dran denken, dass es nicht reicht das Script mit den Rechten auszustatten.
Wenn das Script zum Beispiel den Gameserver startet muss der User bei den Files des GS auch die entsprechenden Rechte haben.

Das habe ich bereits. Der Gameserver hat eine extra User, dessen Homeverzeichnis hat chmod 777.

Ich will das mal näher erläutern. Das Script macht eigentlich nur folgendes: Es startet den Gameserver und läuft permanent im Hintergrund. Falls der Gameserver also aus irgendwelchen Gründen mal abstürzt, wird sofort neu gestartet. Der Code dazu

Code:
/bin/ps ux > ./.temp 
alive=`grep -l 'linuxjampded' ./.temp | wc -l`;
     
if [ $alive -eq 0 ]
then
     
     	lastrestart=`/bin/date`;
	echo "JA+ server restarted on $lastrestart" > ./japlus_restart.txt ;        
       

	nohup /home/jk3/linuxjampded +set dedicated 2 +set com_hunkmegs 64 +set fs_game japlus +set net_port 27000 +exec server.cfg  >log.txt 2>&1 
   	      
          

         sleep(10);
        nohup /home/jk3/autorestart.sh &
	
fi

Das Script funktioniert so wunderbar und sleep würde ja auch erst einsetzen, wenn der Server nicht mehr laufen würde.

Wenn ich den Server nun per Webinterface starte, wird die sh-Datei auch gestartet. Nur der Gameserver läuft nicht wirklich also "linuxjampded" - stattdessen ist dort die ganze Zeit ein sleep wenn ich mit "ps aux" nachschaue.

linuxjampded hat genauso chmod 777 wie alle anderen Dateien.
 
Vieleicht solltest du dazuschreiben welches Script du genau startest bzw. wie das Script heißt wo der Quellcode von ist. Ist das die "/home/jk3/autorestart.sh" oder was anderes ?
Hast du mal probiert mit su erst zum User zu werden und dann das Script aufzurufen ?
 
Ich starte ein Script das wiederrum die autorestart.sh startet. Also ich könnte auch direkt die autorestart.sh starten - das macht keinen Unterschied.

Hast du mal probiert mit su erst zum User zu werden und dann das Script aufzurufen ?

Genau das will ich ja machen - aber ohne root-Rechner würde ja dann ein Passwort verlangt.

Per SSH geht wie gesagt alles ohne Probleme.
 
Ich weiß nicht ob es das gleiche ist den Befehl direkt ans su zu hängen und wirklich erst zum User zu werden und es dann aufzurufen.
Evtl. hat dein user nobody in der /etc/passwd keine Shell eingetragen, aber dann sollte auch kein sleep im ps aux auftauchen.
 
Also ich habe das jetzt direkt mal in der Shell ausprobiert mit dem User nobody den Server zu starten.

Wie gesagt der ganze Ordner mit allen Dateien hat die Rechte 777, jedoch stimmt irgendetwas mit den Rechten nicht, siehe selbst:

http://www.sebastianbrandt.com/nobody.jpg
 
Komisch, was der da versucht.
Hast du mal probiert ein Verzeichnis /.ja manuell zu erstellen.
Ich kann mir aber eigentlich nicht vorstellen, dass der wirklich im root-Verzeichnis was anlegen will, das wäre extremst dämlich programmiert.
 
Also er wird wohl nichts im Root-Verzeichnis anlegen wollen bzw. müssen, denn sonst starte ich den Gameserver per SSH mit dem User "jk3" und dieser User hat auch kaum Rechte.

Hast du mal probiert ein Verzeichnis /.ja manuell zu erstellen.

Das Verzeichnis gibt es schon und ich habe auch Vollzugriff mit nobody dadrauf^^
 

Ähnliche Themen

T
Antworten
3
Aufrufe
1.312
R
Antworten
8
Aufrufe
3.012
Ravenstein
R
M
Antworten
2
Aufrufe
2.894
M
Zurück
Oben