GitHub: https://github.com/gSpotx2f/smarthtml
В связи с приобретением RT-N56U B1 вспомнил про скрипт для мониторинга SMART-параметров диска подключенного к роутеру, который когда-то писал, кажется, ещё для старого WL500gp... Скрипт получает данные из вывода smartctl, сравнивает их с сохранёнными значениями предыдущей проверки и создаёт html-страницу (/opt/share/www/smart.html) с таблицей атрибутов, отображая в ней последние изменения параметров. Также пишет в лог при изменении критически важных атрибутов и может отсылать сообщение по e-mail (sendmail). Опционально использует rrdtool для графика температуры (вообще, скрипт позволяет создавать rrd-графики для любых SMART-атрибутов, но, ИМХО, практический смысл имеет лишь температура). Для RRD присутствуют несколько вариантов пресетов создания баз, в зависимости от интервала обновления данных. Скрипт полностью совместим с ash и awk из busybox.
Перед началом использования, естественно, необходимо установить smartmontools и rrdtool из Entware:
Code:
opkg install smartmontools rrdtool
Сам скрипт нужно положить, к примеру, в /opt/usr/bin/smarthtml.sh (после этого не забыв: chmod +x /opt/usr/bin/smarthtml.sh). Затем добавить в cron для регулярного запуска... По умолчанию база rrd создаётся с шагом в 3 часа, а следовательно:
Code:
10 */3 * * * /opt/usr/bin/smarthtml.sh
При первом запуске скрипт сам создаст каталог /opt/var/smarthtml/ и необходимые файлы для работы.
Параметры вызова:
Code:
/opt/usr/bin/smarthtml.sh # запуск основной процедуры выполнения (запускается cron'ом по расписанию)
/opt/usr/bin/smarthtml.sh resetwarn # сброс предупреждения после изменения критического параметра
/opt/usr/bin/smarthtml.sh resetcount # сброс счётчиков изменений параметров
/opt/usr/bin/smarthtml.sh makerrdgraph # только отрисовка графиков rrd без проверки SMART и без изменения данных
/opt/usr/bin/smarthtml.sh mailtest # отправка тестового email (в случае использования e-mail оповещений)
P.S. Параметры sendmail выставлены под использование openssl (настраивал для прошивки Padavan'а, хотя и в других с busybox sendmail настройки должны быть вроде идентичны)...
Про cgi-модуль smarthtml.cgi... Он позволяет обновлять данные SMART прямо с веб-страницы в любой момент, что может быть удобно для мониторинга в реальном времени. Эта процедура не затрагивает rrd (rrd обновляется cron'ом по расписанию), а поэтому может производиться в любое время когда требуется получить текущие данные. Для работы модуля необходимо в настройках веб-сервера указать выполнение .cgi файлов с помощью /bin/sh.
На примере busybox_httpd (в прошивке Padavan'а его нет, есть в "энтузиастской") нужно добавить след. строку в конфиг:
Для lighttpd нужно установить модуль mod_cgi:
Code:
opkg install lighttpd-mod-cgi
далее в конфиге модуля /opt/etc/lighttpd/conf.d/30-cgi.conf изменить строку
Code:
".cgi" => "/opt/bin/perl",
на
Code:
".cgi" => "/bin/sh",
это заставит сервер выполнять .cgi файлы программой /bin/sh...
Сам smarthtml.cgi нужно положить в /opt/share/www/cgi-bin/ и разрешить на выполнение chmod +x /opt/share/www/cgi-bin/smarthtml.cgi. Ну и, собственно, в "главном" скрипте smarthtml.sh установить переменную USE_CGI_MODULE=1.
Есть один нюанс с правами доступа... Доступ к дисковым устройствам (/dev/sda и пр.) доступен лишь пользователю root (admin), в случае если ваш веб-сервер запускается с правами суперюзера (что в принципе нехорошо, но для embedded-систем является обычным делом), то нет никаких проблем. Если же сервер, скажем, публичный и запускается с правами специально созданного непривелегированного юзера, то можно использовать утилиту sudo из Entware для работы cgi-сценария. В smarthtml.cgi нужно выставить USE_SUDO=1. Затем установить и настроить sudo:
Далее настраиваем через visudo:
откроется /opt/etc/sudoers во всеми горячо любимом vi, там необходимо добавить след. строки (предположим, что веб-сервер запускается под юзером www):
Code:
admin ALL=(ALL) ALL
www ALL=(admin) NOPASSWD:/opt/bin/smartctl, /opt/usr/bin/smarthtml.sh
вторая строка разрешит пользователю www запускать /opt/bin/smartctl и /opt/usr/bin/smarthtml.sh с правами admin без ввода пароля (это важно!), что необходимо для выполнения .cgi сценария...
В случае успешной настройки при "клике" по ссылке "Check Now" в верхней части страницы таблица SMART должна обновиться вместе с датой последней проверки в заголовке таблицы.
Выглядит как-то так:

_______________
Changelog:
0.8.3
1. Для совместимости с различными версиями awk (mawk и пр.) расширенные регулярные выражения заменены на базовые, из кода убрана ф-ция gensub().
2. Исправлено несколько несущественных ошибок в awk-коде.
3. Незначительные изменения в html и js.