В примере на данной странице представлено развертывание Oxidized с целью автоматизированного сбора конфигураций с коммутаторов BDCOM. Для сбора с оборудования других производителей действия аналогичные с поправкой на их специфику подключения и получения конфигураций конкретных моделей.

 Oxidized – это система автоматического резервного копирования конфигураций сетевого оборудования. Она подключается к маршрутизаторам, коммутаторам и другим устройствам, получает их текущие конфигурации и сохраняет версии файлов в Git-репозитории.

Страница проекта на github.com.

В данной инструкции для подключения к оборудованию и сбора конфигураций используется исключительно протокол SSH. Сам Oxidized кроме SSH поддерживает так же некоторые другие протоколы подключения.

 

Для развертывания Oxidized подготовлена виртуальная машина со следующими характеристиками:

CPU: 2 vCPU

RAM: 2 ГБ

Диск: 50 ГБ (система+данные)

Сеть: 1 Gbit/s

ОС: Ubuntu Server 24.04 LTS

Это характеристики для небольшой установки для бэкапа 20-30 сетевых устройств, а не универсальные параметры.

 

Размещение сервера Oxidized следует выполнять в соответствии с политиками информационной безопасности организации, руководствуясь принципом минимально необходимых сетевых доступов.

Предпочтительно размещать сервер в отдельном серверном VLAN или выделенном сегменте сети, предоставляя ему доступ к оборудованию через правила межсетевого экрана. Размещение Oxidized непосредственно в VLAN сетевого оборудования также допустимо, если это не противоречит требованиям ИБ и доступ к устройствам ограничен соответствующими ACL.

Выделение отдельного сегмента обеспечивает централизованный контроль и фильтрацию сетевого трафика, а также ограничивает возможности перемещения по сети в случае компрометации сервера. При этом оно не устраняет риск использования злоумышленником тех доступов к оборудованию, которые предоставлены самому Oxidized.

 

Создаем ВМ, если еще не создана. Устанавливаем операционную систему.

Раздача IP-адреса по DHCP с привязкой к MAC-адресу.

 

Настраиваем весь диск под систему и данные.

Открываем доступ в Интернет на время настроек.

Отмечаем установку SSH сервера.

Задаем понятное название, например, в данном случае название: sw-backup-server.

Создаем учетные данные пользователя и ожидаем установку.

 

Подключаемся по SSH.

Переходим в режим с правами root.

(вводим пароль)

 

Проверяем доступ в Интернет (DNS и доступ к сайтам).

 

Обновляем систему.

 

Можно проверить версию Ubuntu после обновления.

Затем отключаем автообновления и доступ в Интернет.

 

Установка Oxidized.

Устанавливаем зависимости Oxidized.

 

Можно проверить версии и готовность системы к установке.

Git-репозиторий – это хранилище файлов с историей их изменений. Оно сохраняет не только последнюю версию файла, но и предыдущие версии, позволяя просматривать, какие изменения вносились, когда и при необходимости возвращаться к прежнему состоянию.

 

Устанавливаем основной сборщик конфигураций Oxidized.

 

Устанавливаем веб-интерфейс и REST API.

Сам по себе основной Oxidized может работать без веб-интерфейса. oxidized-web – необязательный компонент.

 

Проверка

 

На момент установки актуальные версии были такие:

 

Создание системной учётной записи и первичная инициализация Oxidized.

Oxidized не рекомендуется запускать от имени root. Для его работы создаётся отдельная системная учётная запись oxidized. От её имени будет выполняться служба, храниться рабочая конфигурация и сохраняться резервные копии конфигураций сетевого оборудования.

Создаём пользователя.

Для примера выбрано имя: oxidized.

 

Проверка

 

Переключаемся на пользователя oxidized.

 

Выполняем первый запуск программы одноимённой командой. Это необходимо для создания начального файла конфигурации и пользовательских рабочих каталогов.

(в этом месте oxidized это команда, совпавшая с именем пользователя)

 

При первом запуске программа может сообщить, что конфигурация создана, либо завершиться с сообщением об отсутствии источника устройств.

 

Проверяем, какие файлы созданы:

Домашний каталог /home/oxidized важен не сам по себе – именно в нём Oxidized создаёт пользовательскую конфигурацию и связанные рабочие данные.

Завершаем сеанс пользователя oxidized.

Дальнейшее редактирование конфигурационного файла выполняется от имени администратора (root), поскольку далее необходимо не только изменить параметры работы программы, но и назначить соответствующие права доступа к файлу.

 

Редактирование основной конфигурации.

Делаем резервную копию конфигурации, чтоб было к чему вернуться.

 

Редактируем содержимое файла конфигурации.

 

Задаём параметры его работы:

-учётные данные для подключения к коммутаторам;

-модель оборудования BDCOM;

-периодичность сбора конфигураций;

-параметры подключения по SSH;

-Git-репозиторий для хранения конфигураций и истории изменений;

-источник списка оборудования (router.db);

-настройки веб-интерфейса.

 

Назначение параметров конфигурации.

Измененные параметры относительно дефолтной конфигурации подчеркнуты на скриншоте.

Назначение параметров.

username – имя пользователя для подключения к оборудованию по умолчанию.

password – пароль для подключения к оборудованию по умолчанию.

Если для устройства в router.db указаны индивидуальные учётные данные, то будут использоваться они.

Логины и пароли хранятся в открытом виде!

model: bdcom – модель оборудования по умолчанию. Если модель указана в router.db, применяется значение оттуда.

resolve_dns: false – отключает определение IP-адресов по DNS-именам устройств.

interval: 604800 – интервал опроса оборудования в секундах (604800 = 7 суток). Настраивается индивидуально под потребности в каждом конкретном случае. Можно забирать конфигурацию 1 раз в сутки если на оборудовании выполняется интенсивная работа, или 1 раз в месяц, если оборудование настроено и его больше не трогают.

debug: false – отключает режим отладки и подробное диагностическое журналирование.

run_once: false – Oxidized работает постоянно, а не выполняет только один цикл сбора конфигураций.

threads: 1 – количество одновременно работающих потоков сбора конфигураций.

use_max_threads: false – не использовать автоматически максимальное количество потоков.

timeout: 30 сек – время ожидания ответа при подключении к устройству.

timelimit: 300 сек – максимальное время выполнения сбора конфигурации одного устройства.

retries: 2 – количество повторных попыток при неудачном подключении или сборе конфигурации.

prompt – регулярное выражение для распознавания приглашения командной строки сетевого оборудования (окончание # или >).

next_adds_job: false – отключает автоматическое создание дополнительного задания при принудительном запуске опроса устройства через REST API. Для обычного периодического сбора конфигураций параметр несущественен.

vars: – начало блока дополнительных переменных, передаваемых модели оборудования.

enable: true – передавать модели BDCOM переменную enable со значением true (используется при работе с привилегированным режимом, без этого невозможно вывести конфигурацию).

groups: {} – словарь групп оборудования. В данной конфигурации группы не заданы.

group_map: {} – правила автоматического распределения устройств по группам. Не настроены.

models: {} – дополнительные индивидуальные настройки моделей оборудования. Не заданы.

pid – путь к файлу, в котором хранится идентификатор процесса Oxidized.

log – путь к файлу журнала работы Oxidized.

 

Веб-интерфейс Oxidized.

extensions – начало блока дополнительных расширений Oxidized.

oxidized—web – настройки расширения веб-интерфейса и REST API.

load: true – включает загрузку расширения Oxidized Web.

listen: 0.0.0.0 – разрешает принимать подключения на всех сетевых интерфейсах сервера. Поэтому доступ к веб-интерфейсу необходимо ограничивать правилами файервола или сетевого экрана.

port: 8888 – порт, на котором работает веб-интерфейс.

 

Подключение к сетевому оборудованию.

input – начало блока настроек получения конфигураций от оборудования.

default: ssh – использовать SSH в качестве протокола подключения по умолчанию.

debug: false – отключает отладочный режим для входных подключений.

ssh – настройки подключения по протоколу SSH.

secure: false – отключает проверку подлинности SSH-хоста по его ключу (host key verification). Шифрование SSH-соединения при этом сохраняется, однако Oxidized не проверяет, что подключается именно к ожидаемому устройству. Это упрощает первоначальную настройку, но снижает защиту от подмены SSH-сервера. Для повышения безопасности рекомендуется использовать строгую проверку SSH-ключей устройств (secure: true) с предварительным заполнением и сопровождением файла known_hosts.

timeout: 30 сек – время ожидания ответа при установлении SSH-соединения.

auth_methods: [«password»] – использовать парольную аутентификацию.

kex: []– отдельный список алгоритмов обмена ключами SSH не задан.

encryption: []– отдельный список алгоритмов шифрования SSH не задан.

host_key: []– отдельный список алгоритмов проверки ключей SSH-хоста не задан.

Параметры kex, encryption и host_key оставлены пустыми. Это означает, что мы не переопределяем списки алгоритмов SSH вручную. Фактически используемые алгоритмы определяются библиотекой SSH и её настройками.

 

Хранение конфигураций и история изменений.

output – начало блока настроек сохранения полученных конфигураций.

default: git – использовать Git для хранения конфигураций и ведения истории изменений. Это позволяет просматривать различия между версиями и при необходимости возвращаться к предыдущим.

git – настройки Git-репозитория.

user: Oxidized – имя автора изменений, которое будет отображаться в истории Git.

email: oxidized@localhost – электронный адрес автора изменений в записях Git. Это не адрес для отправки уведомлений.

repo – путь к локальному Git-репозиторию, в котором хранятся конфигурации и история их изменений.

Git сохраняет историю изменений конфигураций, а не историю каждого опроса оборудования. Если после очередного опроса конфигурация не изменилась, новая версия файла в Git не создаётся.

 

Источник списка сетевого оборудования.

source – начало блока настроек источника списка оборудования.

default: csv – использовать CSV-файл в качестве источника списка устройств.

csv – настройки CSV-источника.

file – путь к файлу router.db, содержащему список сетевого оборудования.

delimiter: !ruby/regexp /:/ – использовать двоеточие (:) в качестве разделителя полей файла.

map – определяет соответствие столбцов файла router.db параметрам Oxidized.

name: 0 – первый столбец – имя устройства.

ip: 1 – второй столбец – IP-адрес устройства.

model: 2 – третий столбец – модель оборудования.

username: 3 – четвёртый столбец – имя пользователя для подключения.

password: 4 – пятый столбец – пароль для подключения.

Таким образом, активирована возможность задавать индивидуальные учётные данные для каждого устройства.

Например, model: 2 – индивидуальное указание оборудования в файле router.db

Цифра 2 – это порядковый номер столбца, начиная с нуля (индексы массива).

Если строка в router.db выглядит так:

то Oxidized читает её следующим образом:

Поэтому в конфигурации:

model: 2 означает: взять значение модели из третьего столбца файла router.db.

 

Сопоставление моделей оборудования

model_map: {} – дополнительная таблица соответствия названий моделей оборудования. В текущей конфигурации не используется, поскольку отдельные правила сопоставления не заданы.

 

Настройка уведомлений об ошибках сбора конфигураций. Эта часть конфигурации относится к дополнительным настройкам и скрипту авто-архивирования, который описан в конце. Эти настройки могут понадобится не всем. Кому не нужно – удалить их.

 

hooks – начало блока дополнительных действий (обработчиков событий) Oxidized.

email_node_fail: – имя обработчика, предназначенного для уведомления об ошибке сбора конфигурации устройства.

type: exec – при возникновении события выполнить внешнюю команду или скрипт.

events: [node_fail] – запускать обработчик при возникновении ошибки сбора конфигурации устройства.

cmd – путь к выполняемому скрипту отправки уведомления по электронной почте.

async: true – выполнять скрипт асинхронно, не ожидая его завершения.

timeout: 30 сек – максимальное время выполнения обработчика.

Данный блок подключает внешний скрипт отправки уведомлений. При возникновении ошибки сбора конфигурации сетевого устройства Oxidized запускает скрипт /usr/local/sbin/oxidized-mail-alert.sh, который формирует и отправляет сообщение администратору по электронной почте. Настройка самого скрипта и почтовой службы рассматривается отдельно (в конце).

 

После внесения настроек назначаем владельцем файла пользователя oxidized и ограничиваем права доступа: чтение и запись разрешены только владельцу. Это необходимо для защиты учётных данных, используемых при подключении к сетевому оборудованию.

 

Список устройств router.db.

Создаём список устройств.

 

Начинать следует с одного устройства.

Добавляем в файл одну строку для тестового коммутатора.

 

Пароли в router.db хранятся в открытом виде. Поэтому файл должен иметь ограниченные права доступа, а резервные копии самого файла необходимо защищать наравне с основным конфигурационным файлом Oxidized.

 

Назначаем права файла – oxidized: владелец, чтение и запись.

 

Выполняем тестовый запуск командой:

 

Проверяем результат в отдельной SSH сессии.

 

Проверяем журнал (лог):

По логу:

-Oxidized starting – приложение запущено.

-Loaded 1 nodes – загружен один коммутатор.

-Oxidized-web server listening on 127.0.0.1:8888 – веб-интерфейс запущен, но пока доступен только с самого сервера.

(настройка для доступа с любых интерфейсов уже добавлен в конфигурацию, см. выше)

-Configuration updated for /BDCOM-S2900-01 – конфигурация узла обработана и сохранена в репозитории.

Папка configs.git создана, но пока нужно проверить содержимое резервной копии.

 

Проверяем, создался ли Git-репозиторий:

 

Проверяем содержание.

Из вывода видно, что show fan-status – команда не выполняется. Возможно, другой синтаксис или вообще отсутствует в данной модели.

Проверяем по очереди команды в коммутаторе при подключении по SSH вручную (не через oxidized).

 

Команда show fan-status так же не выполняется.

 

Убираем неподдерживаемую команду. У кого в BDCOM есть вентиляторы, и такая команда выполняется – убирать её не нужно.

Открываем модель:

 

Удаляем следующий блок целиком:

Сохраняем Ctrl+X, выходим.

 

Перезапускаем Oxidized

В терминале, где запущен Oxidized от пользователя oxidized, нажимаем Ctrl+C. Затем запускаем снова.

 

Ожидаем 15-30 секунд и проверяем результат от root.

 

Проверяем что вывелось в конфигурацию при запрое из Oxidized.

В сохранённом файле виден вывод конфигурации коммутатора.

 

Проверяем вход в WEB-интерфейс через браузер из компьютера администратора.

(у каждого свой IP-адрес)

Конфигурацию коммутатора можно просмотреть в браузере.

Из недостатка замечен доступ без логина и пароля.

Веб-интерфейс Oxidized не следует публиковать в общедоступных сетях. Доступ к нему необходимо ограничить межсетевым экраном, разрешив подключение только с рабочих мест администраторов. При необходимости организации более сложного разграничения доступа можно использовать обратный прокси-сервер с авторизацией пользователей.

 

Служба и автозапуск при старте системы.

Останавливаем ручной запуск

В терминале, где запускали oxidized от пользователя oxidized, нажимаем Ctrl+C.

 

Проверяем, что процесс остановлен:

Не должно остаться процесса:

 

Создаём службу systemd.

Выполняем в терминале с правами root.

 

Или создаем файл вручную.

И добавляем содержание.

Сохраняем Ctrl+X, выходим.

 

Включаем автозапуск.

 

Запускаем службу.

 

Проверяем работу.

Проверяем последние записи логов.

Active: active (running) – служба работает.

enabled – будет запускаться автоматически после перезагрузки.

Загружен один узел.

Веб-интерфейс слушает 0.0.0.0:8888.

 

Заполняем файл router.db коммутаторами. Если логин и пароль отличаются, записываем их согласно формата в конце через двоеточие.
Например:

Система настроена и будет собирать конфигурации коммутаторов автоматически 1 раз в неделю.

 

Для повышения информационной безопасности на данном сервере необходимо выполнить следующие мероприятия:

Настроить доступ в сервер только с IP-адреса администратора и его дублера. (в iptables или другом используемом FW)

Отключить работу по IPv6 если не используется.

Дополнительно можно настроить работу SSH только по протоколу IPv4 (в файле /etc/ssh/sshd_config)

В каждом коммутаторе рекомендуется создавать отдельного пользователя с ограниченными правами для Oxidized.

Следует учитывать что router.db содержит учётные данные в открытом виде и не хранить файл в ненадежных местах.

Настроить оповещение о событиях на email.

 

Дополнения ниже описывают решение специфических задач и не являются обязательными в работе Oxidized.

 

ДОПОЛНЕНИЕ 1.

Добавление коммутатора другого производителя.

Пример добавления коммутатора Huawei S6730 По аналогии можно добавлять другие устройства, если для них есть подходящая модель Oxidized.

Определяем модель устройства. Для Huawei VRP используется модель vrp.

Можно проверить файл модели.

Модель vrp подходит не автоматически для всех устройств Huawei. Нужно учитывать семейство оборудования, версию VRP и фактическую совместимость команд, используемых моделью Oxidized.

Перед массовым добавлением устройств необходимо проверить получение полной конфигурации на одном тестовом экземпляре.

Настраиваем индивидуальные учётные данные. В основной конфигурации это уже сделано. Глобальные username и password для существующих BDCOM оставляем без изменений.

Добавляем устройство в список.

Открываем файл router.db.

 

Добавляем новую строку в формате:

Пример Huawei:

 

Перезапускаем Oxidized

После перезапуска Oxidized загрузит список устройств и автоматически попытается получить конфигурацию нового коммутатора. Для доступа в SW Huawei по SSH может понадобится настройка его ACL.
Аналогично добавляются коммутаторы большинства известных производителей.

​

ДОПОЛНЕНИЕ 2.

Проблема с неполной конфигурацией MikroTik.

При получении больших конфигураций MikroTik через SSH в отдельных условиях может происходить преждевременное завершение передачи данных. Проблема проявляется преимущественно при передаче больших объёмов информации по каналам с ограниченной пропускной способностью и повышенной задержкой. В рассматриваемом случае размер получаемой конфигурации составлял около 128 КБ.В Oxidized есть зарегистрированная проблема, когда конфигурация MikroTik обрывается при получении через SSH. В опубликованном в июле 2026 года случае обрыв происходил примерно на 128 КБ. Как раз этот случай и произошел. Конфигурация большая и размер почти 128Кб = обрыв.

Решение.

Редактируем конфигурацию.

 

Добавляем строку.

Сохраняем, выходим.

Проверяем синтаксис.

 

Перезапускаем Oxidized.

 

Проверяем статус.

 

Повторно получаем конфигурацию в GUI Oxidized. Конфигурация полная.

Изменение файла sshbase.rb относится к исходному коду установленного Oxidized. При обновлении программы или переустановке Ruby Gem внесённая правка может быть потеряна. Поэтому необходимо фиксировать её отдельно и повторно проверять после обновлений.

​

ДОПОЛНЕНИЕ 3.

Сценарий создания архива с резервными копиями.

Необходимость собирать архив из резервных копий 1 раз в месяц и хранить в защищенном месте вызвана политиками информационной безопасности, принятыми в организации.

Сценарий (скрипт) выполняет ежемесячное архивирование всех конфигураций собранных в Oxidized. Т.е. он не собирает конфигурации самостоятельно, а только проверяет и упаковывает в архив уже сохранённые файлы конфигураций.

Выполняется обработка всех устройств, перечисленных в router.db.

При добавлении нового коммутатора в router.db никаких дополнительных изменений в скрипт не требуется.

Перед созданием архива скрипт проверяет наличие конфигурации каждого устройства. Если хотя бы одна конфигурация отсутствует, выполнение прекращается с сообщением об ошибке.

Скрипт использует последние сохранённые в Git конфигурации. Наличие конфигурации в репозитории не гарантирует, что последнее обращение к устройству завершилось успешно. Поэтому перед архивированием желательно контролировать журнал работы Oxidized и наличие ошибок опроса оборудования.

Скрипт разделен на два скрипта для упрощения и контроля. Первый отвечает исключительно за создание архивов, второй – за запуск первого, контроль результата и уведомление администратора по электронной почте.

Скрипт №1 – oxidized-monthly-backup.sh

Назначаем права.

 

Проверка синтаксиса сценария.

 

Проверка выполнения.

 

Скрипт №2 – oxidized-monthly-backup-notify.sh

Скрипт запуска архивирования и отправки уведомлений по электронной почте.

Выполнение скрипта вручную.

 

После создания скрипта назначаем владельца, группу и права доступа:

Права 755 позволяют владельцу читать, изменять и выполнять скрипт, а остальным пользователям – читать и выполнять его.

 

Скачивание архива через MobaXterm.

Если понадобится получить доступ к архиву, скачиваем его. Для этого просматриваем содержание папки.

 

Выбираем нужный архив и подставляем его название в команду копирования.

Копируем созданный архив в папку tmp.

 

Назначаем права того пользователя, который подключен в MobaExterm.

 

Скачиваем к себе на ПК через менеджер (SFTP) MobaXterm.

После скачивания удаляем временную копию:

Исходный архив останется на сервере.

 

Очистка папки с архивами. (если понадобится)

 

Проверка.

В скрипт добавлена строка, которая автоматически удаляет архивы старше 365 дней. Она будет запускаться после успешного создания нового архива.

При добавлении устройства от другого производителя, дополнительных изменений в скрипте архивации и расписании не требуется.

В архив попадут устройства, перечисленные в router.db, если их конфигурации уже сохранены в Git.

 

Настройка автоматического запуска архивирования по расписанию.

Для автоматического ежемесячного запуска архивирования используется системное расписание Cron.

Файл задания:

 

Создаем или открываем файл.

 

Добавляем строку:

В результате архивирование будет выполняться **первого числа каждого месяца в 02:00** от имени пользователя root.

При запуске используется скрипт oxidized-monthly-backup-notify.sh, который выполняет основной сценарий архивирования и отправляет уведомление о результате на электронную почту.

 

Вывод выполнения и сообщения об ошибках записываются в журнал:

 

Проверить настройку можно командой:

 

Настройка отправки уведомлений.

Для отправки уведомлений о результатах архивирования используется программа msmtp.

Перед использованием скрипта oxidized-monthly-backup-notify.sh необходимо настроить SMTP-параметры и учётные данные почтового ящика. Порядок настройки приведён в дополнении 4.

​

ДОПОЛНЕНИЕ 4.

Оповещение на email.

Настройка SMTP для системного пользователя root. Она нужна чтоб отправлялись уведомления из скрипта oxidized-monthly-backup-notify.sh (ежемесячное архивирование). Скрипт oxidized-monthly-backup-notify.sh запускается через Cron от имени root.

Используется почтовый сервер smtp.yandex.ru по порту 587 с STARTTLS.

Отправитель: моя_почта@yandex.ru

Получатель: моя_почта@yandex.ru

Программа отправки: msmtp

Настраиваем основной конфигурационный файл:

В нём заданы SMTP-сервер, порт, TLS и параметры учётной записи. Пароль хранится отдельно в /etc/msmtp-credentials, а не непосредственно в конфигурации.

Назначаем владельца и права на скрипт.

Пользователь oxidized сможет запускать скрипт, но не сможет изменять его содержимое.

Назначаем владельца и права файла msmtp-credentials.

 

Настройка SMTP для пользователя oxidized.

Настраиваем отдельную SMTP-конфигурацию для Oxidized.  Она используется для уведомлений об ошибках опроса оборудования. Oxidized работает от системного пользователя oxidized, поэтому для него нужно создавать отдельный файл.

Создаем параметры SMTP для Oxidized. Аналогичные параметрам, представленным выше.

 

Задаем пароль SMTP (от почтового ящика).

 

Назначаем владельца и права.

 

Права 600 означают, что читать и изменять файлы может только их владелец.

 

Проверка результата по правам.

 

Проверяем отправку. Тестовое письмо успешно доставлено.

Если команда завершилась без ошибок (код возврата 0), значит msmtp успешно передал письмо почтовому серверу.

 

Скрипт отправки уведомлений.

Создаем файл.

Содержание.

Скрипт получает от Oxidized информацию о сбое и отправляет письмо со следующими данными:
-имя устройства;
-тип события;
-причина ошибки.

В скрипте используется SMTP-конфигурация пользователя oxidized.
Назначаем владельца и права доступа:

 

Проверка.

 

Чтоб скрипт работал, в главный конфигурационный файл добавлен обработчик событий Oxidized.

В конец файла добавлен блок:

type: exec – запуск внешней команды;
events: [node_fail] – событие, возникающее после исчерпания заданного количества попыток опроса устройства;
cmd – путь к скрипту отправки письма;
async: true – выполнение без ожидания завершения отправки в основном процессе;
timeout: 30 – тайм-аут выполнения обработчика.

Количество попыток подключения и интервал опроса определяются другими параметрами Oxidized, в частности retries и interval.

hooks: должен находиться на верхнем уровне YAML, без отступа слева.

Если в конфигурации уже существует раздел hooks:, нужно добавить обработчик внутрь него, а не создавать второй одноимённый раздел.

Перезапускаем службу.

 

Проверяем статус.

 

Проверяем выполнение сценария.
На одном из коммутаторов заблокирован SSH-доступ и запущен oxidized. Подключение не произошло, о чём было отправлено уведомление на email.

Просмотр логов.

 

Ручной запуск скрипта

Если ручной запуск завершился с кодом 0, это означает, что команда отправки завершилась успешно.

Настройка получилась достаточно сложной. Как вариант упрощения можно попробовать отправлять письма непосредственно из Hook, тем самым исключить скрипт отправки. Но этот способ не тестировался.

​