我创建了简单的nagios插件 检查_日志.ps1 来检查Windows机器上的日志文件。它的工作方式是复制日志的内容,然后在下一次在日志副本和原始日志文件的差异中寻找指定的字符串。
问题是有时在随机时刻check_log.ps1会锁定日志文件,所以会导致创建日志文件的应用程序停止。
一般来说,插件会在两个地方使用原始日志文件
# compare content of $Logfile and $Oldlog, save diff to $tempdiff
Compare-Object -ReferenceObject (Get-Content -Path $Logfile) -DifferenceObject (Get-Content -Path $Oldlog) | Select-Object -Property InputObject > $tempdiff
# override file $Oldlog using conetent of $Logfile
Copy-Item $Logfile $Oldlog
我做测试。在一个PS会话中,我运行 while($true) { [string]"test" >> C:\test\test.log }
在第二个会话中,我运行插件 C:\test\check_log.ps1 C:\test\test.log C:\test\Old_log.log test
我不完全确定我的测试是否正确,但我认为......。Copy-Item
命令造成的问题。当我在脚本中注释这一行时,我在终端上没有看到任何错误。我测试了一些自定义函数来复制文件,我在互联网上找到的,但我没有找到我的问题的解决方案。
你有一个想法,如何使它完全工作?
如果你认为复制项锁定了文件,请尝试读取内容,然后保存到另一个位置。类似这样。
Get -Content $Logfile