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
我正在尝试 运行 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