Я пытаюсь перенаправить stdout на .\output\worker01.log
и stderr на .\output\worker01-error.log
. Это работает, если я запустить команду в оболочке:Перенаправление stdout и stderr в фоновом режиме в файлы в powershell
PS Q:\mles\etl-i_test> .\worker\bin\win32\php.exe -q -c .\worker\conf\php.ini .\worker\bin\os-independant\logfilefilter\logfilefilter.php -f .\worker\worker01\conf\logfilefilter-worker01.xml 2> .\output\worker01-error.log > .\output\worker01.log
worker01.log
и worker01-error.log
записываются в выходной каталог.
Однако мне это нужно в сценарии powershell как несколько фоновых процессов. Могут быть n рабочих процессов, в моей тестовой папке 8 рабочих. Вот как я это называю:
$strPath = get-location
$workers = get-childitem -Path worker -Filter worker*
foreach ($worker in $workers)
{
Write-Host "Start $worker in background"
$block = {& $args[0] $args[1] $args[2] $args[3] $args[4] $args[5] $args[6] $args[7] $args[8] $args[9] $args[10]}
start-job -scriptblock $block -argumentlist `
"$strPath\worker\bin\win32\php.exe", `
"-q", `
"-c", `
"$strPath\worker\conf\php_win32.ini", `
"$strPath\worker\bin\os-independant\logfilefilter\logfilefilter.php", `
"-f", `
"$strPath\worker\$worker\conf\logfilefilter-$worker.xml", `
"2>", `
"$strPath\output\$worker-error.log", `
">", `
"$strPath\output\$worker.log"
}
Если я запустить сценарий, я могу видеть 8 PHP и процессы PowerShell нерест, который сразу же исчезают. В выходном каталоге нет файлов журналов.
Вы только что ответили на свой вопрос? –
Да, я так и сделал, так как я решил это тем временем. – mles