我寫一個PowerShell腳本,讓Logstash到了一定的時間運行,然後通過進程ID停止程序。下面是代碼的基本版本:Powershell的停止過程中不殺生Logstash
$logstashFilepath = "C:\Users\emckenzie\Downloads\logstash-5.3.2\logstash-5.3.2\bin\logstash.bat"
$logstashArguments = "-f C:\users\emckenzie\Downloads\logstash-5.3.2\logstash-5.3.2\test_loader.conf"
$logstashprocess = Start-Process -FilePath $logstashFilepath -ArgumentList $logstashArguments -PassThru
$logstashid = $logstashprocess.Id
Write-Host $logstashid
Start-Sleep -s 60
Stop-Process $logstashid
在這種情況下,測試只Logstash從標準輸入寫入到標準輸出。當我運行此程序時,輸出如下所示:
17120
Stop-Process : Cannot find a process with the process identifier 17120.
At C:\Users\emckenzie\Documents\Loaders\testLoader.ps1:13 char:13
+ Stop-Process <<<< $logstashid
+ CategoryInfo : ObjectNotFound: (17120:Int32) [Stop-Process], ProcessCommandException
+ FullyQualifiedErrorId : NoProcessFoundForGivenId,Microsoft.PowerShell.Commands.StopProcessCommand
這是Logstash或Powershell中的問題嗎?
任何幫助將不勝感激!
看起來像Logstash正在啓動另一個進程。您應該能夠使用任務管理器或更好的SysInternals Process Explorer來見證這一點。如果事實證明這是你可以開始可能的Logstash情況下,稍等片刻,然後由它的名字抓住新的進程ID,如果它是一致的。 –
感謝您的迴應!我想通了,我需要什麼程序停止Logstash(Java和JRuby的),但更多的閱讀,我不認爲這是一個好主意,去解決,而不讓它安全地停止殺害logstash後。存在數據丟失的風險,Elasticsearch也依賴於Java和JRuby。必須有一種官方的方式來做到這一點。 – emckenzie