Мониторинг свободного места на диске с помощью OneScript

30.05.21

Администрирование - Мониторинг

Скрипт, который проверяет объем свободного места на каждом диске и оповещает на почту о нехватке места.

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

Задача: настроить оперативное оповещение на почту, если свободного места на диске осталось меньше 5 Гб.

Решение

1) Устанавливаем OneScript (или можно скачать и распаковать портативную версию): https://oscript.io/

2) В командной строке устанавливаем библиотеку для работы с почтой:

opm install InternetMail


3) Создаем файл FreeDiskSpace.os и правим под свою специфику

#Использовать InternetMail

Функция ОтправитьПисьмо(Тема, Текст, МассивВложений) 
	Пользователь = "test@mail.ru";
	Пароль = "12345WWWeee";
	Профиль = Новый ИнтернетПочтовыйПрофиль;
	Профиль.АдресСервераSMTP    = "smtp.mail.ru";
	Профиль.ПользовательSMTP    = Пользователь;
	Профиль.ПарольSMTP          = Пароль;
	Профиль.ИспользоватьSSLSMTP = Истина;
	Профиль.АдресСервераIMAP    = "imap.mail.ru";
	Профиль.ИспользоватьSSLIMAP = Истина;
	Профиль.Пользователь = Пользователь;
	Профиль.Пароль = Пароль;
	Сообщение = Новый ИнтернетПочтовоеСообщение;
	Сообщение.Получатели.Добавить("admin1@domain.ru");
	Сообщение.ОбратныйАдрес.Добавить("admin1@domain.ru");
	Сообщение.Отправитель = Пользователь;
	Сообщение.Тема = Тема;
	Сообщение.Тексты.Добавить(Текст, ТипТекстаПочтовогоСообщения.HTML);
	Для Каждого Влож Из МассивВложений Цикл
		Сообщение.Вложения.Добавить(Влож);
	КонецЦикла;
	Почта = Новый ИнтернетПочта;
	Почта.Подключиться(Профиль, ПротоколИнтернетПочты.POP3);
	Почта.Послать(Сообщение, , ПротоколИнтернетПочты.SMTP);
КонецФункции

Функция ОбъемСвободноГб(БукваДиска)
	ид = Новый ИнформацияОДиске(БукваДиска);
	ДоступноБайт = ид.Доступно;
	ДоступноКб = ДоступноБайт / 1024;
	ДоступноМб = ДоступноКб / 1024;
	ДоступноГб = ДоступноМб / 1024;
	Возврат ДоступноГб;
КонецФункции

Функция ТемаСОбъемомДиска(Тема, БукваДиска, ДоступноГб, МинОбъемГб)
	Тема2 = Тема;
	Если ДоступноГб < МинОбъемГб Тогда 
		сДоступноГб = Строка(ОКР(ДоступноГб));
		Тема2 = Тема + БукваДиска + "=" + сДоступноГб + " Гб; ";		
	КонецЕсли;
	Возврат Тема2;
КонецФункции

Функция ТекстСообщенияСвободноНаДиске(БукваДиска, ДоступноГб)
	тСообщ = Строка(ТекущаяДата()) + " На диске '" + БукваДиска +"' свободно " + Строка(ОКР(ДоступноГб)) + " Гб.";
	Возврат тСообщ;
КонецФункции

Попытка	
	МинОбъемГб = 5;
	КоличествоДнейХраненияЛогов = 2;
	Тема = "Dev windows2016 Мало места на дисках: ";
	Текст = "На дисках меньше " + Строка(МинОбъемГб) + " Гб. Освободите занятое пространство. На каждом диске должно быть свободного места больше " + Строка(МинОбъемГб) + " Гб.";
	ТекДата = ТекущаяДата();
	МинДатаИзмененияФайла = ТекДата - КоличествоДнейХраненияЛогов*60*60*24;
	тЛог = "";
	МассивВложений = Новый Массив; 
	
	сТекДата = Строка(ТекДата);
	сТекДата = СтрЗаменить(сТекДата, Символы.НПП, "");
	сТекДата = СтрЗаменить(сТекДата, ":", ".");
	сТекДата = СтрЗаменить(сТекДата, " ", "_");
	чДень = День(ТекДата);
	чГод = Год(ТекДата);
	чМес = Месяц(ТекДата);
	сГод = СтрЗаменить(Строка(чГод), Символы.НПП, "");
	сМес = ?(чМес > 9, Строка(чМес), "0"+Строка(чМес));
	сДень = ?(чДень > 9, Строка(чДень), "0"+Строка(чДень));
	КаталогЛогов = "C:\LOGS\" + сГод + "\" + сМес + "\";
	СоздатьКаталог(КаталогЛогов);
	ИмяЛогаПроверки = КаталогЛогов + "FreeDiskSpace_" + сТекДата + ".txt";
	ЛогУд = Новый ЗаписьТекста(ИмяЛогаПроверки, КодировкаТекста.UTF8);
	
	СДоступноГб = ОбъемСвободноГб("C");
	ДДоступноГб = ОбъемСвободноГб("D");
	
	Тема = ТемаСОбъемомДиска(Тема, "C", СДоступноГб, МинОбъемГб);
	Тема = ТемаСОбъемомДиска(Тема, "D", ДДоступноГб, МинОбъемГб);
	
	тСообщ = ТекстСообщенияСвободноНаДиске("C", СДоступноГб);
	ЛогУд.ЗаписатьСтроку(тСообщ);
	тЛог = тСообщ;
	тСообщ = ТекстСообщенияСвободноНаДиске("D", ДДоступноГб);
	ЛогУд.ЗаписатьСтроку(тСообщ);
	тЛог = тЛог + Символы.ПС + тСообщ;
	
	МасФ = НайтиФайлы(КаталогЛогов, "*.*");
	Для Каждого Ф ИЗ МасФ Цикл
		ДатаФайла = Ф.ПолучитьВремяИзменения();
		Если ДатаФайла < МинДатаИзмененияФайла Тогда
			тСообщ = Строка(ТекущаяДата()) + " Удаляется файл '" + Ф.ПолноеИмя + "', так как дата изменения='" + Строка(ДатаФайла) + "' < '" + Строка(МинДатаИзмененияФайла) + "'.";
			ЛогУд.ЗаписатьСтроку(тСообщ);
			УдалитьФайлы(Ф.ПолноеИмя);
		Иначе
			тСообщ = Строка(ТекущаяДата()) + " Остается файл '" + Ф.ПолноеИмя + "', так как дата изменения='" + Строка(ДатаФайла) + "' >= '" + Строка(МинДатаИзмененияФайла) + "'.";
			ЛогУд.ЗаписатьСтроку(тСообщ);
		КонецЕсли;
	КонецЦикла;
	
	Если СДоступноГб < МинОбъемГб ИЛИ ДДоступноГб < МинОбъемГб Тогда 
		ЛогУд.ЗаписатьСтроку(Текст);
		ЛогУд.Закрыть();
		Текст = тЛог + Символы.ПС + Текст;				
		МассивВложений.Добавить(ИмяЛогаПроверки);
		ОтправитьПисьмо(Тема, Текст, МассивВложений);
	Иначе
		тСообщ = "На дисках более " + Строка(МинОбъемГб) + " Гб, поэтому считается, что все в порядке.";
		ЛогУд.ЗаписатьСтроку(тСообщ);
	КонецЕсли;
	
Исключение
		ОписОш = ОписаниеОшибки();
		тСообщ = "Скрипт остановился раньше, работа прервана. Проверьте работу скрипта.";
		тСообщ = тСообщ + Символы.ПС + "Ошибки: " + Символы.ПС + ОписОш;		
		Сообщить(тСообщ);
		ЛогУд.ЗаписатьСтроку(тСообщ);
		ЛогУд.Закрыть();
		МассивВложений.Добавить(ИмяЛогаПроверки);
		Тема = Тема + " - есть ошибки выполнения скрипта!";	
		ОтправитьПисьмо(Тема, тСообщ, МассивВложений);
КонецПопытки;

3) Создаем файл FreeDiskSpace.bat
 

"C:\Program Files\OneScript\bin\oscript.exe" "C:\Scripts\os\FreeDiskSpace.os"

4) Файл FreeDiskSpace.bat добавляем в планировщик заданий, например, с расписанием выполнения "Каждый час".

Таким образом задача решена.

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

Ограничения

Конечно, если диск заполнится раньше часа, то мониторинг не поможет, но такие ситуации должны решаться иначе: т.е. свободного дискового запаса должно хватать на достаточно длительное время.

Вступайте в нашу телеграмм-группу Инфостарт

свободное место заполнен диск дисковое мониторинг письмо на почту OneScript 1Script контроль диска места скрипт

См. также

Работа с интерфейсом Анализ учета Мониторинг 1С v8.3 8.3.14 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Платные (руб)

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

16800 руб.

27.03.2025    4996    12    11    

16

Мониторинг Анализ продаж 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Розница 3.0 Управленческий учет Платные (руб)

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

24000 руб.

11.11.2024    1107    1    0    

2

Мессенджеры и боты Журнал регистрации Мониторинг Email рассылки Системный администратор 1С v8.3 Управляемые формы 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Рассылка уведомлений о событиях журнала регистрации на электронную почту и в Телеграмм. Программа позволяет анализировать журнал регистрации по заданным критериям, находить в нём интересующие события, и отправлять уведомления об этих событиях на электронную почту (одного или нескольких получателей) или в телеграмм. Может работать и как внешняя обработка, и как регламентное задание. Для УНФ, УТ 11, БП 3.0, ЗУП 3.0, ERP.

10800 руб.

18.06.2017    33444    4    2    

15

Журнал регистрации Мониторинг Пользователь 1С v8.3 Россия Абонемент ($m)

Узнайте, кто, что и когда менял в ваших справочниках и документах! Гибкий и быстрый отчет на основе журнала регистрации с удобной фильтрацией! Отчет покажет все действия пользователей на основании журнала регистрации по двум основным типам объектов в 1С.

1 стартмани

19.06.2025    524    8    Yellow_Cube    5    

3

OneScript Программист 1С v8.3 Бесплатно (free)

В 2024 году главному инструменту DevOps в 1С исполнилось 10 лет. Расскажем о том, что представляет собой экосистема 1Script в 2024 году и почему её важно включить в свой рабочий процесс.

16.06.2025    5497    Evil Beaver    35    

56

Групповая разработка (Git, хранилище) EDT OneScript Программист 1С v8.3 Бесплатно (free)

В данной публикации рассматривается пример реализации скрипта, который автоматизирует получение ветки из GIT репозитория и обновление конфигурации, если разработка проекта ведется в EDT.

11.06.2025    1654    AlexF1    4    

7

Закрытие периода Мониторинг Программист Бухгалтер 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Абонемент ($m)

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

1 стартмани

06.06.2025    393    0    annak2906    0    

1

Мониторинг Мессенджеры и боты Системный администратор Абонемент ($m)

DiskSpaceControl: контроль свободного места на дисках с Telegram-уведомлениями. Простая настройка, безопасное хранение токена, запуск по расписанию. Поддержка любых дисков, тревоги по порогу, всё работает “из коробки”.

2 стартмани

05.06.2025    519    2    Baszilio    3    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Sedaiko 593 03.06.21 12:21 Сейчас в теме
Круто.
но PS или Bash обычно в коробке
4. info1i 241 03.06.21 12:57 Сейчас в теме
(1) PS или Bash родные, но не являются универсальными, а bash даже требует пакет mailutils для отправки почты.
Данный же скрипт является и кроссплатформенным, и зависимым только от OneScript.
2. cmd_vasec 34 03.06.21 12:31 Сейчас в теме
В скрипте в открытую указан пароль от почты, как его скрыть?
3. info1i 241 03.06.21 12:50 Сейчас в теме
(2) На тему скрытия пароля в скрипте пока отсутствуют идеи.
5. cmd_vasec 34 03.06.21 13:06 Сейчас в теме
Написано не универсально, если мне надо добавить диск или убрать, надо вникать в код и дописывать. Если в подключение возникает ошибка, то в логах ошибки нет.
6. info1i 241 03.06.21 13:52 Сейчас в теме
(5) Вникать в код обязательно в любом случае надо.
Функция ОтправитьПисьмо вызывается внутри Попытки, поэтому в логах ошибка должна остаться.
7. cmd_vasec 34 03.06.21 15:57 Сейчас в теме
(6) У меня в логах ошибки нет. В начале не могу понять почему не приходит письмо.
8. info1i 241 03.06.21 16:31 Сейчас в теме
(7) А лог пишется?
И на какой именно строке лог остановился?
Вполне возможно, что письмо отправлено успешно, но с запозданием приходит или что-то с почтовым сервером.
9. Pependos 28 07.09.21 13:43 Сейчас в теме
А есть ли возможность узнать свободное место на сетевом диске?
10. info1i 241 07.09.21 18:01 Сейчас в теме
(9) Не известно, нужно пробовать.
Однако любой сетевой диск - это ведь тоже диск, который является локальным на каком-то компьютере, на котором нужно устанавливать данный скрипт, так можно.
11. santey8602 04.03.22 10:24 Сейчас в теме
все здорово, работает. Но он постоянно присылает сообщения, неважно, кончается место или нет. так и должно быть? порог указал 10Гб. По факту больше 30 свободного места. просто заспамит почту)
Хотелось бы что бы сообщение приходило только тогда, когда места меньше указанного порога
12. info1i 241 04.03.22 12:26 Сейчас в теме
(11) Нет, так не должно быть: либо ошибка в подправленном коде, либо операционная система выдает ошибочный размер свободного места.
13. santey8602 05.03.22 08:49 Сейчас в теме
может потому что убрал везде диск Д?
как должен выглядеть код только с проверкой одного диска С?
14. info1i 241 05.03.22 10:47 Сейчас в теме
(13) Вместо кода
СДоступноГб = ОбъемСвободноГб("C");
ДДоступноГб = ОбъемСвободноГб("D");

должно быть:
СДоступноГб = ОбъемСвободноГб("C");
ДДоступноГб = 100000000;
15. santey8602 05.03.22 13:13 Сейчас в теме
(14)
100000000
Спасибо! Не спамит теперь!
16. Batman1978 27.01.23 13:38 Сейчас в теме
Новый ИнформацияОДиске(БукваДиска); - не могу найти в 1с. Подскажите что это за функция ? в какой версии поддерживается 1с ?
18. info1i 241 27.01.23 13:48 Сейчас в теме
(16) Да, это функция. В 1С отсутствует. Присутствует только в OneScript.
17. Batman1978 27.01.23 13:38 Сейчас в теме
Можете дать СП по ней ?
Оставьте свое сообщение