2016-07-12 16 views
3

バッチファイルに問題があり、PHPで実行しています。PHP経由で実行されるバッチファイルは、すべてのコマンドをバックグラウンドプロセスとして実行します。

制限付きアクセスが許可されているサーバー上で実行されるノードサーバーとAvaya CMSがあります。

サーバがクラッシュすることがあるため、サーバを毎日再起動する必要があるため、すべてのcmdウィンドウ、ノード、およびavayaをシャットダウンするバッチファイルを作成しました。

次に、すべてのノードサーバーとavayaを開き、avayaにログインするAHKスクリプトを起動し、最後にいくつかのavayaレポートを起動します。

バッチファイルをダブルクリックしたとき、またはタスクスケジューラで実行したときに、これはすべて正常に動作しますが、PHPページをクリックしてボタンをクリックして実行できるようになりました。

これは私が問題を抱えているところです。

ボタンをクリックすると、バッチファイルが実行され、すべてのノードサーバーがクローズされているので、最初は思っていました。

実際にはバッチファイル全体が実行されていますが、すべてのcmdウィンドウとavayaがバックグラウンドプロセスとして実行されていることがわかりました。

AFAIK PHPからバッチファイルを実行する場合、cmdを開く方法がありませんが、バッチファイル自体がcmdウィンドウとavayaをフォアグラウンドで実行すると考えました。

これを達成する方法はありますか?

必要に応じて以下のコードを入力してください。

PHP

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

バッチファイル

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 

お時間をありがとう:)

バリー

+0

PHを上書きする、即座に発生するスケジュールされたタスクを作成しようとする実行中のコードのバックグラウンドでのデフォルトの動作。 [PHPでWindowsタスクを作成する](https://codesnob.wordpress.com/2009/05/30/creating-windows-task-with-php/) – dafyk

答えて

1

一つの可能​​な解決策としては、Webアプリケーションとして実行されているPHPを分離することを検討しますバッチファイルを実行するPHPと、それらの間のいくつかのメカニズムを使って通信するお互いにネイキッド。 例えば、最初のPHPは、ステータスとMySQLのテーブルの行を挿入することができ「 - RESTARTを提出」、及び第二のPHPは、Windowsタスクスケジューラで実行することもできるし、各2分:

  • クエリMySQLのテーブルが存在するかどうか'SUBMIT-RESTART'ステータスが
  • の行がある場合は、ステータスが 'RESTARTING'に変更され、バッチコマンドが実行されます。
  • 終了時にステータスを 'RESTART-DONE'に変更します。
+0

ご協力いただきありがとうございます。ただ確認するには、唯一の違いは、バッチファイルを実行するPHPは、2分ごとにスケジュールされたタスクによって実行されるスクリプトでしょうか? –

関連する問題