Se avete degli “UserParameter” configurati nel vostro Zabbix Agent che eseguono degli script e ricevete l’errore

[m|ZBX_NOTSUPPORTED]

Potrebbe dipendere dal fatto che lo script aggiunge il carriage return in fondo alla stringa.

Esempio che vi restituirà l’errore [m|ZBX_NOTSUPPORTED]

UserParameter=postfix.deferred[*],/usr/sbin/postqueue -p | egrep -c “^[0-9A-F]{10}[^*]”
UserParameter=postfix.active[*],/usr/sbin/postqueue -p | egrep -c “^[0-9A-F]{10}[*]”

La soluzione è togliere i caratteri speciali in fondo alla stringa con il comando tr -d ‘\r\n’

UserParameter=postfix.deferred[*],/usr/sbin/postqueue -p | egrep -c “^[0-9A-F]{10}[^*]” | tr -d ‘\r\n’
UserParameter=postfix.active[*],/usr/sbin/postqueue -p | egrep -c “^[0-9A-F]{10}[*]” | tr -d ‘\r\n’

Per prima cosa installiamo i pacchetti per mandare il magic packet che farà il WOL

apt-get install etherwake wakeonlan

Poi creiamo un file in /etc/zabbix di nome check_wol.sh e diamoli i giusti permessi

touch /etc/zabbix/check_wol.sh

chown zabbix.root /etc/zabbix/check_wol.sh

chmod 750 /etc/zabbix/check_wol.sh

Modifichiamolo e inseriamo al suo interno il seguente codice

#!/bin/bash

if ! ping -c 1 -w 5 "$1" &>/dev/null ; then
  /usr/bin/wakeonlan -i "$1" "$2"
  echo "0"
else
  echo "1"
fi

Modifichiamo il file /etc/zabbix/zabbix_agentd.conf e alla fine aggiungiamo

UserParameter=wol[*],/etc/zabbix/check_wol.sh “$1” “$2”

Riavviamo l’agent

/etc/init.d/zabbix-agent restart

Poi creaiamo il nostro item all’interno dell’host in cui è installato l’agent con le seguenti configurazioni:

Type: zabbix agent

Key: wol[ip_server,mac_server]

Show value: Host Status

naturalmente se volete potete anche impostare le fasce orarie in cui eseguirlo e la distanza fra i vari check (io nel mio caso ho messo ogni 5 minuti).

Lo script si rivela comodo perchè nel momento che l’host non risponde al ping automaticamente viene mandato il magic packet per accenderlo e viene impostato l’item a zero in modo da creare un trigger per avvisare l’amministratori.