Zabbix脚本超时

时间:2016-08-26 15:28:43

标签: powershell scripting monitoring zabbix

我正在尝试运行PowerShell脚本来清​​理Zabbix上的代理磁盘。似乎脚本运行时间过长而反应我得到了错误。

powershell -NonInteractive C:\Scripts\CleanDisk.ps1 -deleteLogsOlderThanDays 10

脚本删除一些日志和临时文件夹并打印统计信息。如果只有很少的文件夹要删除它就会罚款。但是如果脚本运行时间过长,那么带有脚本结果的对话框窗口会以错误从代理获取值失败:ZBX_TCP_READ

猜猜是因为连接到客户端超时。有什么方法可以克服这个限制吗? THX

2 个答案:

答案 0 :(得分:0)

我的同事找到了可用的解决方法。而不是启动将运行很长时间的脚本,最好只使用schtask.exe来安排脚本。所以我修改了脚本,现在它包含两个部分。一个负责安排和启动预定任务(安排自己但使用不同的参数),第二个重负责和长时间运行执行操作。调度结果将出现在zabbix的执行脚本对话框中,长时间运行的结果将转到日志文件...

以下是powershell脚本StartCleanDisk.ps1的示例。在这种情况下,任务将被调度并立即执行。

StartCleanDisk.ps1 -deleteLogsOlderThanDays 10 -startAsTask 1

在这种情况下,任务将直接执行。

StartCleanDisk.ps1 -deleteLogsOlderThanDays 10 -startAsTask 0

StartCleanDisk.ps1内容:

[CmdletBinding()]
param
(
    [parameter(Mandatory=$true)]
    [int]
    $deleteLogsOlderThanDays,
    [bool]
    $startAsTask = $false
)

if ($startAsTask)
{
    Write-Output "Scheduling task for cleaning disk ...";

  $taskname = "CleanDisk"
    $logFile = "X:\logs\Tasks\cleaningDisk.log";
    $task = "powershell $PSScriptRoot\StartCleanDisk.ps1 -deleteLogsOlderThanDays $deleteLogsOlderThanDays -startAsTask 0 > $logFile 2>&1";
    & schtasks /create /ru "System" /tn $taskname /tr $task /sc once /ST 23:59 /F /V1 /Z;
    Write-Output "Task Clean disk created...";
    & schtasks /run /tn $taskname;
    Write-Output "Task $taskname started... Please chek $logFile";
    exit 0;
}

#####################
# Script begins here
# PUT HERE COMMANDS FOR DELETING
#####################

答案 1 :(得分:0)

从隐藏进程开始

UserParameter=Key[*],powershell -NoProfile -ExecutionPolicy Bypass Start-Process powershell -ArgumentList \\Path\SYSVOL\..\scripts\Files\Zabbix\Key.$1.ps1 "$2" "$3" -Windowstyle Hidden

其中Key [*]是Zabbix代理中的活动项,用于在Windows主机上启动Powershell, $ 1用于表示PowerShell脚本的名称,“ $2" "$3" "next"用于表示所有参数

如果$1="Ring",则脚本名称将为Key.Ring.ps1