• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

[Windows Server] Php -> bat -> exe

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
Hey Leute,

ich möchte per PHP-Skript (exec) eine batch-Datei starten, die ihrerseits wiederum neben ein paar anderen Dingen einen Server (exe) startet.

Klicke ich die BAT manuell an, funktioniert alles tadellos. Versuche ich es indirekt über das PHP-Skript, taucht die Server-Exe ca. eine Sekunde im Taskmanager auf und verschwindet dann wieder. Das PHP-Skript hängt sich auf und endet nach ner Zeit mit nem 500-Error. Im Taskmanager sieht man im Hintergrund verbleibend eine cmd.exe und parallel dazu eine conhost.exe. Bei jedem Versuch, mit PHP den Server zu starten, kommt so ein Pärchen dazu.

Das komplette Konstrukt hatte auf einem anderen Server schon einmal funktioniert. Erst seit dem Umzug zickt es rum. Ich denke, dass es etwas mit Windows-Rechten zu tun hat. Oder blockt irgendein Sicherheitssystem den Hintergrundprozess?

Ich würde mich über einen Work-Around freuen. Wie kann ich vorgehen, um dem Problem auf die Schliche zu kommen?


PHP-Skript
[src=php]
<?php
ob_start();
$size = ob_get_length();
header("Content-Length: ".$size);
header('Connection: close');
ob_end_flush();
ob_flush();
flush();

session_start();

@session_write_close();
set_time_limit(0);
ignore_user_abort(true);

error_reporting(E_ALL);
exec("start OurAltis_start.bat", $output, $return_var);

echo "output: <br>";
print_r($output);
echo "<br><br>return: <br>";
print_r($return_var);

exit;
?>
[/src]

BATCH
[src=text]
@echo off

setlocal

set "ProgPath=D:\arma3server\arma3files"
set "Prog=arma3server_x64.exe"

for /f "delims=" %%l in ('for /f "skip=3 tokens=2" %%p in ^('tasklist /fi "imagename eq %Prog%"'^) do @^<NUL set /p "=%%p "') do (
set "PIDs=%%l"
)

start "%Prog%" "%ProgPath%\%Prog%" -profiles=C:\inetpub\vhosts\isleofmine.de\httpdocs\webgui\interface\Profil+Logs -config=ouraltis_server.cfg -port=2302 -world=empty -noSound -filePatching -enableHT -mod=@CBA_A3 -servermod=@extDB3;

for /f "skip=3 tokens=2" %%p in ('tasklist /fi "imagename eq %Prog%"') do (
echo %PIDs% | find "%%p" > NUL || if not defined NewPID set "NewPID=%%p"
)

if defined NewPID echo Neue Instanz: %NewPID%

echo %NewPID% > PID.txt
[/src]
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
Kann nach der Beschreibung nur an Rechten oder der PHP Konfiguration liegen.

Pfade könnten vielleicht auch noch abweichen, ich würde alle konstruierten Strings mal in eine Datei Schreiben lassen und die mal gründlich gegen die Realität des neuen Systems prüfen.
 

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #3
Kann nach der Beschreibung nur an Rechten oder der PHP Konfiguration liegen.
Meiner Meinung nach kann die PHP-Konfiguration nicht mehr mitspielen, weil ich ja schon weit darüber hinaus gekommen bin. Die BAT wurde ausgelöst und die wiederum hat bereits, wenn auch nur kurzfristig, den Server gestartet. Ich habe überlegt, ob die cmd.exe im Ordner system32 noch Rechte braucht. Die kann ich leider nicht einstellen. Liegt das daran, dass es ein vServer (STRATO) ist?

Pfade könnten vielleicht auch noch abweichen, ich würde alle konstruierten Strings mal in eine Datei Schreiben lassen und die mal gründlich gegen die Realität des neuen Systems prüfen.
Da alles wie geplant auslöst, können Pfade nicht falsch sein. Habe auch schon etliche male gegengetestet, in dem ich den Taschenrechner aufrufen ließ.
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.823
Ort
Midgard
Pfade waren ja auch nur ein Beispiel, wie gesagt, check alle Strings und idealerweise den Output des Programms das den Dienst verweigert. Aufgerufen wirds ja offenbar.

Können halt immer noch Parameter nicht passen.

edit:
Woher hast du das PHP Skript, funktioniert das?
Warum setzt du den Header so seltsam?

Hat vermutlich nichts mit dem Problem zu tun, aber wenn ich eins gelernt habe dann bei seltsamen Konstellationen sehr skeptisch zu sein.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.730
Ort
in der Zukunft
benötigt der Dienst administrative Rechte um zu funktionieren?
Sprich muss er auf Ressourcen zugreifen / in ziele Schreiben die von Benutzern nicht verwendet werden können?

Was passiert wenn du eine cmd-Box / PowerShell-Box auf machst ohne das oben links "Administrator" im Titel steht - und dann die .exe startest die die .bat startet?

Ich hoffe und bange das das der php-Interpreter Befehle nicht im erhöhten Rechte-Kontext ausführt. Das sollte er auch auf gar keinen Fall tun. Nur wenn der Dienst das benötigt dann erklärt das warum es nicht funktioniert.
 

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #7
Ich kann mich nur als Admin bei Windows einloggen. Gibt es eine Möglichkeit, die cmd ohne Adminrechte auszuführen, obwohl ich in Windows als Admin eingeloggt bin?
 

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #9
Egal, auf welchem Wege ich sie starte, oben links steht

Administrator: C:\Windows\system32\cmd.exe
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.730
Ort
in der Zukunft
Sicherheitstechnisch eher bedenklich - aber gut dann dürfte das in der Tat mit dem Dienst auch keine Probleme machen. Dann scheint die UAC abgeschaltet zu sein? :(

Nichts desto trotz - was passiert wenn du deine Exe dann einfach in dem Fenster startest?
Unter welchem Benutzer läuft denn der php-dienst?
 

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #11
Die UAC habe ich nicht abgeschaltet. Komischerweise steht im Kontextmenü trptzdem noch "als Administator starten". Wie dem auch sei, ich kann den Server mit der cmd problemlos starten.

Ich habe gerade im PHP-Skript das Starten der Batch-Datei ersetzt durch das Starten der Server-Exe. Also quasi auf dem direkten Weg, um herauszufinden, ob die CMD überhaupt das Problem ist. Siehe da, das Phänomen ist dasselbe: Der Server taucht kurz als Hintergrundprozess auf und verschwindet sofort wieder. Übrigens hat die Batch-Datei auch alles andere sauber erledigt, was sie neben dem Serverstart noch zu tun hatte.

Es scheint also ein Problem mit dem Server ansich zu sein. Vielleicht möchte er nicht im Hintergrund gestartet werden?

Ich habe auch versucht, den Server manuell mithilfe der CMD im Hintergrund zu starten:

D:\arma3server\arma3files>start /b arma3server_x64.exe
Er startet trotzdem im Vordergrund.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.730
Ort
in der Zukunft
klar kann durchaus sein das wenn die Anwendung kein Fenster erstellen kann - abbricht.
Oder das Dateien in z.B. %appdata% geschrieben werden soll - und der Ordner nicht existiert. Daher die Frage unter welchem Benutzer php läuft und mit welchem Benutzer der Server gestartet wird kurz bevor er abbricht.
 

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #13
Ich sende mal einen Screenshot, den ich in dem kurzen Moment des Auftauchens gemacht habe. Sieht so aus, als liefen beide unter dem selben Namen
Unbenannt-1.jpg

Doppelklicke ich die server.exe direkt, steht als Benutzername ADMINISTRATOR.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.730
Ort
in der Zukunft
ah unter dem IIS-Benutzer ok.
Da steht auch werfault.exe - das heißt die Anwendung ist abgestürzt.
Darüber sollte etwas in der Ereigenisanzeige unter Anwendung stehen.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.730
Ort
in der Zukunft
nachdem der php opcache wohl mit abstürzt kannst du diesen in der php.ini deaktivieren:

opcache.enable=0

sonst such mal nach allen .dmp dateien und ob dabei eine arma3server_64.dmp oder irgendwie sowas dabei ist (oder php-fpm, opcache..) - die könntest du dann irgendwo hoch laden und mir eine pn schicken (dort könnten in der Theorie auch userdaten mit drin sein - normal aber nicht).
 

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #17
mhh, der Ordner C:\Windows\Minidump ist leer.

Habe den server jetzt einmal über die aufgabenplanung in den hintergrund gejagd und einmal über einen neuangelegten Benutze ohne Adminrecht. Beides funktioniert.
Nur wenn PHP den server aufruft und wenn er damit unter dem IIS Benutzer laufen will, stürzt er sofort wieder ab.
 
Zuletzt bearbeitet:

Rakorium-M

NGBler

Registriert
14 Juli 2013
Beiträge
413
Nur ne doofe Vermutung: Änder deinen Befehl mal in [kw]"start /b OurAltis_start.bat"[/kw].
 

braegler

Aktiver NGBler

Registriert
14 Juli 2013
Beiträge
898
Würde es mal wie folgt versuchen:
exec("runas /user:Administrator /savecred " . '"OurAltis_start.bat"', $output, $return_var);

Du musst die Batch natürlich vorher einmal mit runas /user:Administrator /savecred "OurAltis_start.bat"
manuell starten, damit der Deine Usercredentials auch speichern kann
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.730
Ort
in der Zukunft
und danach kann man übers weg ohne Passwort alles als Admin starten... super :D
Das Passwort wird jeweils beim user der es ausgeführt gespeichert und nur dieser hat darauf zugriff - das heißt der Befehl müsste vorher einmalig mit dem IIS benutzer ausgeführt werden.

Der IIS-Benutzer dürfte wie geschrieben kein Profil haben - damit können Dateien die beim start ins Profil geschrieben werden würden - nicht geschrieben werden.

Dies kann man aber aktivieren:
https://blogs.msdn.microsoft.com/vi...ser-profile-of-the-application-pool-identity/

ist ein alter Tipp - ist nun eventuell ein wenige an einer anderen stelle - habe gerade keinen IIS zum nachgucken.
 
Oben