Zabbix 脚本超时

Zabbix script timeout

我正在尝试 运行 powershell 脚本以从 Zabbix 清理代理上的磁盘。脚本似乎 运行 太长了,我得到的响应是错误的。

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

脚本删除一些日志和临时文件夹并打印统计信息。如果只有几个文件夹要删除,则可以正常工作。但是,如果脚本 运行 太长,则带有脚本结果的对话框 windows 以错误结束 从代理获取值失败:ZBX_TCP_READ

猜测是因为客户端连接超时。有什么办法可以克服这个限制吗? 感谢

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

这是 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
#####################

作为隐藏进程启动

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

其中 Key[*] 是 Zabbix 代理中的一个活动项,用于在 windows 主机上启动 powershell, $1 用于名称 PowerShell 脚本的变体,“" "" "next" 用于任何参数

if ="Ring" 那么脚本的名称将 Key.Ring.ps1