2016-07-12 1 views
3

Ich habe Probleme mit einer Batch-Datei und Ausführen von PHP.Batch-Datei über PHP ausgeführt läuft alle Befehle als Hintergrund Prozesse

Wir verfügen über einige Knotenserver und Avaya CMS, die auf einem Server mit eingeschränktem Zugriff ausgeführt werden.

Die Server müssen täglich neu gestartet werden, da sie manchmal abstürzen, also habe ich eine Batch-Datei erstellt, um alle cmd-Fenster, Knoten und Avaya herunterzufahren.

Dann öffnet es alle Knoten-Server und Avaya, startet ein AHK-Skript, das sich in Avaya anmeldet, und startet schließlich ein paar Avaya-Berichte.

Das alles läuft gut, wenn ich auf die Batch-Datei doppelklicke, oder wenn ich es über Taskplaner ausführe, aber jetzt möchten wir in der Lage sein, es über einen Klick auf eine PHP-Seite auszuführen.

Hier renne ich in Schwierigkeiten.

Von was ich sehen kann, wenn ich auf die Schaltfläche klicke, läuft die Batchdatei, schließt alle Knotenserver und das ist es, oder so dachte ich, zuerst.

Durch einige Graben habe ich festgestellt, dass es in der Tat die Ausführung der gesamten Batch-Datei, aber es läuft alle cmd Windows und Avaya als Hintergrundprozesse, und ich denke, das ist, wo mein Problem liegt.

AFAIK beim Ausführen von Batch-Dateien von PHP gibt es keine Möglichkeit, es öffnen cmd, aber ich dachte, dass die Batch-Datei selbst würde die cmd Windows und Avaya im Vordergrund laufen.

Gibt es einen Weg, dies zu erreichen?

Code unten, wenn es benötigt wird.

PHP

$test = escapeshellcmd('C:\Windows\System32\cmd.exe /k 
"C:\wamp\www\batch_files\R - Wallboards Script"'); 
system($test); 

Batch File

title Launching Servers... 
echo Kill Avaya 
@echo off 
taskkill /f /im "acsCNTRL.exe" /T 
taskkill /f /im "acsApp.exe" /T 
taskkill /f /im "wscript.exe" /T 
taskkill /f /im "ACScript.exe" /T 
taskkill /f /im "acsSRV.exe" /T 
taskkill /f /im "acsRep.exe" /T 


@echo off 

call getCmdPID 
set "current_pid=%errorlevel%" 

for /f "skip=3 tokens=2 delims= " %%a in ('tasklist /fi "imagename eq cmd.exe"') do (
if "%%a" neq "%current_pid%" (
TASKKILL /PID %%a /f /T >nul 2>nul 
) 
) 
timeout 5 
echo Kill Node 
for /f "skip=3 tokens=2 delims= " %%a in ('tasklist /fi "imagename eq node.exe"') do (
if "%%a" neq "%current_pid%" (
TASKKILL /PID %%a /f /T >nul 2>nul 
) 
) 


@REM DEFINE PATH TO BATCH FILES 
SET batch_file_Path="C:\wamp\batch_files" 

@REM Change directory to batch files 
cd %batch_file_Path% 

@REM ####################### 
@REM # LAUNCH NODE SERVERS # 
@REM ####################### 
echo Launch Node Servers 
@REM RADAR 
start cmd /k launch_server.bat C:\wamp\www\radar 

@REM RADAR_SCHEDULE 
start cmd /k launch_server.bat C:\wamp\www\radar_schedule 


@REM ###################################################################### 
@REM # LAUNCH NODE SERVERS WITH "NODE FILENAME.JS" INSTEAD OF "NPM START" # 
@REM ###################################################################### 

@REM LOGIN_DATA_SERVER 
start cmd /k launch_server_node.bat login_data_server.js 

@REM WALLBOARD_SERVER 
start cmd /k launch_server_node.bat wallboard_server.js 

@REM SERVER 
start cmd /k launch_server_node.bat server.js 


@REM ######################## 
@REM # LAUNCH AVAYA REPORTS # 
@REM ######################## 
echo Launch Avaya 
@REM Launch CMS Supervisor and wait 10 seconds 
"C:\Program Files (x86)\Avaya\CMS Supervisor R16\acsRun.exe" /L:enu 
"C:\Program Files\AutoHotkey\AutoHotkey.exe" "\\Path\To\File\cmsLogin.ahk" 
timeout 10 
echo Launch Avaya Reports 
@REM Launch Reports 
"\\Path\To\File\Agent Status.acsup" 
"\\Path\To\File\RE - Wallboard.acsup" 
"\\Path\To\File\RD - Wallboard.acsup" 
"\\Path\To\File\WT - All Agent LoginLogout.acsup" 
"\\Path\To\File\WT - Agent Realtime.acsup" 

timeout 2 
exit 

Vielen Dank für Ihre Zeit :)

Barry

+0

Versuchen Sie, geplante Aufgabe zu erstellen, die sofort feuert, die PH übersteuert P Standardverhalten von laufendem Code im Hintergrund. [Windows Aufgabe mit PHP erstellen] (https://codesnob.wordpress.com/2009/05/30/creating-windows-task-with-php/) – dafyk

Antwort

1

Als eine mögliche Lösung, sollten Sie die PHP-Trennung, die als Web-Anwendung läuft mit der PHP, die die Batch-Datei und mit einigen Mechanismen zwischen ihnen auf Commu läuft miteinander in Verbindung bringen. Zum Beispiel könnte die erste PHP eine MySQL-Tabellenzeile mit dem Status einfügen ‚SUBMIT-NEUSTART‘ und die zweite PHP in Windows-Taskplaner jeweils 2 Minuten ausgeführt werden könnte, das tut:

  • Abfrage der MySQL-Tabelle gibt, ob ist eine Zeile mit 'SUBMIT-RESTART' Status
  • Wenn es eine solche Zeile gibt, ändern Sie den Status in 'RESTARTING' und fahren Sie fort, um die Stapelbefehle auszuführen,
  • beim Beenden, ändern Sie den Status in 'RESTART-DONE'
+0

HI vielen Dank für Ihren Vorschlag. Nur um zu bestätigen, der einzige Unterschied wäre, dass das PHP, das die Batch-Datei ausführt, ein Skript ist, das alle 2 Minuten von einer geplanten Aufgabe ausgeführt wird? –

Verwandte Themen