Problem med att köra bat i PHP

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Sep 2006

Problem med att köra bat i PHP

Hejhej

Jag hjälper en polers att smälla upp en Minecraft-server som han kan stänga av/på via en webbsida.
Mitt problem är att httpd.exe äter upp all CPU, vilket jag tror betyder att det finns en loop eller liknande.
När jag anropar "Start" så står sidan och tuggar, den startar ju applikationen och kör bat-filen som den ska. Men som sagt äter httpd all CPU och sidan står och tuggar. Jag vill ju att sidan ska gå tillbaka till där den var.

Ber om ursäkt för luddig förklaring.

Fetmarkerat är mest för test, men samma problem uppstår.

Någon som vet vad jag har gjort fel?

execute.php

<?php //Starta sessionen session_start(); set_time_limit(5); //Kolla om användaren inte är inloggad if(!isset($_SESSION['username'])){ //Skicka vidare användaren header("Location: index.php"); exit; } if($_GET['action'] == "Start") { exec ("E:\Minecraftserver\Server.bat"); header("Location: service.php"); exit; } elseif($_GET['action'] == "Stop") { exec("E:\Minecraftserver\kill.bat"); header("Location: service.php"); exit; } else { echo "Invalid parameter!"; } header("Location: service.php"); exit; ?>

Server.bat

"C:\Program Files (x86)\Java\jre7\bin\javaw.exe" -Xms1536M -Xmx1536M -jar "E:\Minecraftserver\craftbukkit.jar" -o false pause

Tack på förhud.

Bärbar + docka: MSI GS30 M2, Nvidia GTX 970 4GB OC
Server: DL380 G6, 36GB RAM, ESXi 5.5
NAS: Synology DS413 4st 3TB | Synology RS810+ 4st 2TB
HTPC: Intel NUC, 8GB, 120GB SSD.

Trädvy Permalänk
Medlem
Registrerad
Feb 2012

Se notes för exec() (http://se1.php.net/manual/en/function.exec.php) samt ta en extra titt på din batch-fil.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jan 2004

Server.bat returnerar ju aldrig så därför fortsätter inte ditt PHP-script.

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Sep 2006
Skrivet av iXam:

Server.bat returnerar ju aldrig så därför fortsätter inte ditt PHP-script.

Tack för svar.
Nej jag tänker på det också. Men hur ska jag lösa det?

Bärbar + docka: MSI GS30 M2, Nvidia GTX 970 4GB OC
Server: DL380 G6, 36GB RAM, ESXi 5.5
NAS: Synology DS413 4st 3TB | Synology RS810+ 4st 2TB
HTPC: Intel NUC, 8GB, 120GB SSD.

Trädvy Permalänk
Medlem
Plats
Helsingfors / Finland
Registrerad
Dec 2004

Testa att köra med följande istället - det borde fungera då start-kommandot kör programmet separat och torde därmed returnera tillbaka till php. Har dock inte testat det men värt att kika på. Alternativt testa lägg in start-kommandot in i din bat-fil.

exec ("start E:\Minecraftserver\Server.bat");

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Sep 2006
Skrivet av firechild:

Testa att köra med följande istället - det borde fungera då start-kommandot kör programmet separat och torde därmed returnera tillbaka till php. Har dock inte testat det men värt att kika på. Alternativt testa lägg in start-kommandot in i din bat-fil.

exec ("start E:\Minecraftserver\Server.bat");

Tack! Det fungerade helt klart bättre. httpd äter inte CPU. Dock står sidan fortfarande och tuggar och väntar på något.
EDIT: Så fort jag dödar java-processen och cmd-processen så slutar den tugga. Känns som att den väntar på något ändå.

Bärbar + docka: MSI GS30 M2, Nvidia GTX 970 4GB OC
Server: DL380 G6, 36GB RAM, ESXi 5.5
NAS: Synology DS413 4st 3TB | Synology RS810+ 4st 2TB
HTPC: Intel NUC, 8GB, 120GB SSD.

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Apr 2003

Detta står på php.net om exec.

If a program is started with this function, in order for it to continue running in the background, the output of the program must be redirected to a file or another output stream. Failing to do so will cause PHP to hang until the execution of the program ends.

Så php väntar på att ditt program ska sluta köra. Så om du vill att programmet fortfarande ska köra så testa med att lägga till /B efter start

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Sep 2006
Skrivet av hamre:

Detta står på php.net om exec.

If a program is started with this function, in order for it to continue running in the background, the output of the program must be redirected to a file or another output stream. Failing to do so will cause PHP to hang until the execution of the program ends.

Så php väntar på att ditt program ska sluta köra. Så om du vill att programmet fortfarande ska köra så testa med att lägga till /B efter start

Tack för svar. Men då går det tillbaka till precis som om man inte använder start. Dvs httpd tar massor med CPU och precis som samma problem som innan.

Bärbar + docka: MSI GS30 M2, Nvidia GTX 970 4GB OC
Server: DL380 G6, 36GB RAM, ESXi 5.5
NAS: Synology DS413 4st 3TB | Synology RS810+ 4st 2TB
HTPC: Intel NUC, 8GB, 120GB SSD.

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Apr 2003

Okej. Kan vara så att exec inte klarar av bakgrundsprocesser i windows. Du får nog titta på andra sätt. Kanske popen?

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Sep 2006

Löstes genom att köra pclose(popen("start /B Server.bat", "r"));

Bärbar + docka: MSI GS30 M2, Nvidia GTX 970 4GB OC
Server: DL380 G6, 36GB RAM, ESXi 5.5
NAS: Synology DS413 4st 3TB | Synology RS810+ 4st 2TB
HTPC: Intel NUC, 8GB, 120GB SSD.