Logstashを一定時間実行してプロセスIDでプログラムを停止できるようにするPowerShellスクリプトを作成しています。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だけstdoutに標準入力からの書き込みこのテストケースには:ここでは、コードの基本的なバージョンがあります。このプログラムを実行すると、出力は次のようになります。
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