Скрипт мониторинга (версия из второго сообщения полностью работоспособна, из первого не актуальна)
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
-
- Сообщения: 1658
- Зарегистрирован: 15 сен 2017, 09:03
Спасибо автору. Очень не плохо. Заслуживает внимания.
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
- Brook
- Сообщения: 158
- Зарегистрирован: 24 май 2022, 00:29
Автор просил делиться мыслями, нам не жалко. Не критики ради, а обучения для.
Первый вариант не смотрел, второй разобрал. Скрипт создает netwatch-и с типом simple и прописывает код в up-script и down-script и вот там вся логика.
Разберем на примере down-script:
Здесь вы получаете состояние netwatch путем поиска этой записи по полю host, получая из нее комментарии. Далее по скрипту вся работа идет с ними.
Возник вопрос зачем через комментарии это делать, если можно обратиться к полю status этой записи, раз уже нашли её. Но можно вообще ничего не искать. Поиск - операция затратная.
Все нужные переменные уже есть в памяти во время выполнения скрипта. Можете в этом убедиться прописав в up или down:
А если все переменные есть, то не нужно ничего искать. Скрипт и так знает о себе всё.
Дополнительные пинги только мешают, лучше выставить задержку больше чем $interval, а после нее проверять $status и уже в зависимости от этого принимать решение об отправке в Телеграм.
Скрипт, который идет в up и down можно сильно сократить и сделать одинаковым для обоих. А можно использовать test-script. Это тот код, который будет выполняться через каждый $interval.
Что касается глобальных переменных, то они действительно недоступны из netwatch. Но есть обходной путь. Можно вместо кода прописать имя скрипта, который будет выполнен, и там уже они будут доступны.
Причем все локальные переменные из netwatch будут доступны во внешнем скрипте, потому что он использует контекст скрипта netwatch .
Чтобы убедиться в этом, создайте скрипт с именем script1 и правами read, write, test, reboot, пропишите в нем код, который выше. В поле test для netwatch пропишите имя script1. Все переменные все-равно будут выведены в лог.
Первый вариант не смотрел, второй разобрал. Скрипт создает netwatch-и с типом simple и прописывает код в up-script и down-script и вот там вся логика.
Разберем на примере down-script:
Код: Выделить всё
:local state [tool netwatch get value-name=comment [find host=\"$v\"]];
Возник вопрос зачем через комментарии это делать, если можно обратиться к полю status этой записи, раз уже нашли её. Но можно вообще ничего не искать. Поиск - операция затратная.
Все нужные переменные уже есть в памяти во время выполнения скрипта. Можете в этом убедиться прописав в up или down:
Код: Выделить всё
:log info ("host:" . $host)
:log info ("type:" . $type)
:log info ("interval:" . $interval)
:log info ("status:" . $status)
:log info ("done-tests:" . $"done-tests")
Дополнительные пинги только мешают, лучше выставить задержку больше чем $interval, а после нее проверять $status и уже в зависимости от этого принимать решение об отправке в Телеграм.
Скрипт, который идет в up и down можно сильно сократить и сделать одинаковым для обоих. А можно использовать test-script. Это тот код, который будет выполняться через каждый $interval.
Что касается глобальных переменных, то они действительно недоступны из netwatch. Но есть обходной путь. Можно вместо кода прописать имя скрипта, который будет выполнен, и там уже они будут доступны.
Причем все локальные переменные из netwatch будут доступны во внешнем скрипте, потому что он использует контекст скрипта netwatch .
Чтобы убедиться в этом, создайте скрипт с именем script1 и правами read, write, test, reboot, пропишите в нем код, который выше. В поле test для netwatch пропишите имя script1. Все переменные все-равно будут выведены в лог.