2016-08-26 4 views
0

Zabbix에서 에이전트의 디스크를 청소하기 위해 powershell 스크립트를 실행하려고합니다. 스크립트가 너무 오래 실행되고 응답 대신 오류가 발생했습니다.Zabbix 스크립트 시간 초과

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

스크립트는 일부 로그 및 임시 폴더를 삭제하고 통계를 인쇄합니다. 삭제할 폴더가 거의 없다면 벌금이 부과됩니다. 그러나 스크립트가 너무 오래 실행되면 스크립트 결과가있는 대화 상자 창이 오류 으로 끝납니다. 에이전트에서 값을 가져 오지 못했습니다 : ZBX_TCP_READ

클라이언트 시간 초과로 연결되어 있기 때문입니다. 이 제한을 극복하는 방법이 있습니까? Thx

+0

Zabbix 버전 2.4 –

+0

당신은 어떻게 Zabbix 측에서 그것을 실행하는 - 그것은 userparameter, 원격 명령 또는 다른 방법이 있나요? – Richlv

+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 
#####################