Как отлаживать исполняемый скрипт для collectd

Я написал небольшой скрипт для сбора состояния питания (ожидание, активность) моего диска. Он основан на этом скрипте: https://github.com/collectd/collectd/blob/master/contrib/exec-smartctl

/usr/share/collectd/exec_hddpwrmode.sh

#!/bin/bash
HOSTNAME="${COLLECTD_HOSTNAME:-$(hostname -f)}"
INTERVAL="${COLLECTD_INTERVAL:-60}"

while sleep "$INTERVAL"
do
  for disk in sda sdb sdc sdd sde sdf
  do
    STATE=$(sudo smartctl -i -n standby /dev/$disk | grep -e "Device is in STANDBY mode" -e "Power mode is:    ACTIVE or IDLE" 2>/dev/null)
    if [ "$STATE" = "Device is in STANDBY mode, exit(2)" ]
      then
        # STANBY
        VALUE="0"
      else
        if [ "$STATE" = "Power mode is:    ACTIVE or IDLE" ]
          then
            # ACTIVE or IDLE
            VALUE="1"
          else
            # ERROR
            VALUE="U"
        fi
    fi
    echo "PUTVAL $HOSTNAME/disk-$disk/disk-state interval=$INTERVAL N:$VALUE" | tee -a /tmp/hddpwrstate.log
  done
done

Вывод в /tmp/hddpwrstate.log выглядит хорошо.

PUTVAL magneto/exec-smart/pwrstate_sdf interval=10.000 N:0
PUTVAL magneto/exec-smart/pwrstate_sda interval=10.000 N:0
PUTVAL magneto/exec-smart/pwrstate_sdb interval=10.000 N:1
PUTVAL magneto/exec-smart/pwrstate_sdc interval=10.000 N:0
PUTVAL magneto/exec-smart/pwrstate_sdd interval=10.000 N:0
PUTVAL magneto/exec-smart/pwrstate_sde interval=10.000 N:0
PUTVAL magneto/exec-smart/pwrstate_sdf interval=10.000 N:0

Это означает, что у меня нет проблем с разрешениями (скрипт должен запускаться пользователем, который может использовать sudo). И выполняется с помощью collectd

Но я не получаю ни новых rrd-файлов в /var/lib/collectd/rrd/<hostname>, ни новых измерений в моей InfluxDB.

> show measurements
name: measurements
name
----
cpu_value
df_value
disk_io_time
disk_read
disk_value
disk_weighted_io_time
disk_write
entropy_value
interface_rx
interface_tx
irq_value
load_longterm
load_midterm
load_shortterm
memory_value
processes_value
rrdcached_value
swap_value
uptime_value
users_value

Пробовал активировать отладку.

<Plugin syslog>
  LogLevel debug
</Plugin>

Но это не помогает.

Nov 19 12:13:12 magneto collectd[30028]: Exiting normally.
Nov 19 12:13:12 magneto collectd[30028]: collectd: Stopping 5 read threads.
Nov 19 12:13:12 magneto collectd[30028]: exec plugin: Sent SIGTERM to 30042
Nov 19 12:13:12 magneto collectd[30028]: collectd: Stopping 5 write threads.
Nov 19 12:13:13 magneto collectd[31752]: Stopping statistics collection and monitoring daemon: collectd.
Nov 19 12:13:13 magneto collectd[31767]: syslog: invalid loglevel [debug] defaulting to 'info'
Nov 19 12:13:13 magneto collectd[31768]: syslog: invalid loglevel [debug] defaulting to 'info'
Nov 19 12:13:13 magneto collectd[31769]: Initialization complete, entering read-loop.
Nov 19 12:13:13 magneto collectd[31764]: Starting statistics collection and monitoring daemon: collectd.

Итак, почему мой скрипт не работает? Здесь что-то не так? Или как я могу отладить, чтобы найти проблему самостоятельно?

Моя система: Debian 8 с OpenMediaVault.


person Christoph W.    schedule 19.11.2017    source источник
comment
Пожалуйста, посмотрите: shellcheck.net   -  person Cyrus    schedule 19.11.2017
comment
Спасибо. Не знал этот сайт. Теперь в скрипте не осталось проблем. Но он все еще не работает с collectd.   -  person Christoph W.    schedule 19.11.2017


Ответы (1)


Я заработал.

Похоже, мой PUTVAL был неправильным.

Это работает сейчас:

echo "PUTVAL $HOSTNAME/exec-$disk/gauge-disk_state interval=$INTERVAL N:$VALUE" | tee -a /tmp/hddpwrstate.log
person Christoph W.    schedule 19.11.2017