Мониторинг свободного места на диске с помощью 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 контроль диска места скрипт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

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

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

31720 руб.

27.03.2025    89422    67    44    

75

Инструменты администратора БД Корректировка данных Мониторинг Учет документов 1С 8.3 1С:Управление торговлей 10 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Розница 3.0 Платные (руб)

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

6100 руб.

11.06.2026    636    2    0    

4

HighLoad оптимизация Мониторинг Системный администратор Программист 1С 8.3 Бесплатно (free)

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

вчера в 12:00    200    nedomolkov.ivan    0    

1

HighLoad оптимизация Мониторинг Системный администратор Программист 1С 8.3 Бесплатно (free)

Если в журнале регулярно всплывает deadlock, а пользователь жалуется на документ, которого в отчёте о взаимоблокировке вообще нет, эта статья про то, как искать настоящего виновника. Главный вывод: разбирать один deadlock бесполезно. Один случай не отличить от совпадения, а картину даёт только частота: какие объекты повторяются во всех отчётах сразу. Внутри готовый SQL-запрос, который разворачивает список ресурсов в таблицу частот, и три грабли на нём. Плюс четыре ложных следа, на которые мы потратили часы, и объяснение, почему объект из жалобы виноват не был. Чем закончилось: помогла одна галочка на реквизите, а замер до и после показал разницу на два порядка по логическим чтениям. Есть и раздел про цену этого решения, которую мы не измерили.

18.08.2026    384    nedomolkov.ivan    0    

0

Перенос данных 1C Мониторинг Системный администратор Программист 1С 8.3 Бесплатно (free)

Если у вас интеграционная шина и обмены иногда встают непонятно почему, эта статья про то, где искать. Главный вывод за год эксплуатации: очереди самой шины виноваты редко. Отставание копится на стороне 1С, и обычный мониторинг длины очереди его не ловит совсем: очередь короткая, всё зелёное, а канал стоит сутки. Внутри пять поломок, которые не воспроизводятся на тестовом стенде и вылезают только на длинном непрерывном аптайме, и три случая, когда шина отчиталась «доставлено», а данные в базу не приехали. По каждой: симптом, куда мы полезли сначала и почему мимо, настоящая причина и что помогло. Отдельно история про то, как врал наш мониторинг, и как проверить свой за полчаса. В конце чеклист на двадцать пунктов: что задать в контейнере до первого запуска, что мониторить кроме длины очереди и чем рестарт шины отзовётся в базах-приёмниках.

17.08.2026    619    nedomolkov.ivan    4    

1

Мониторинг Программист 1С 8.3 Абонемент ($m)

Готовый модуль трейсинга операций для 1С: создание спанов со стеком, наследование TraceID, поддержка распределённых трейсов (фоновые задания, HTTP, интеграции), гарантированное завершение спанов при любом исходе и граничный режим «отката» стека. Все данные пишутся в журнал регистрации в JSON-виде и визуализируются в отдельной обработке — с деревом спанов, длительностями, статусами, атрибутами и ошибками.

1 стартмани

17.08.2026    496    0    van_za    0    

15

Мониторинг Программист 1С 8.3 Россия Бесплатно (free)

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

17.08.2026    853    166    AleksandrEvplov    14    

19

Перенос данных 1C Мониторинг Программист Бесплатно (free)

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

21.07.2026    2049    Sibars    12    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Sedaiko 603 03.06.21 12:21 Сейчас в теме
Круто.
но PS или Bash обычно в коробке
4. info1i 249 03.06.21 12:57 Сейчас в теме
(1) PS или Bash родные, но не являются универсальными, а bash даже требует пакет mailutils для отправки почты.
Данный же скрипт является и кроссплатформенным, и зависимым только от OneScript.
2. cmd_vasec 34 03.06.21 12:31 Сейчас в теме
В скрипте в открытую указан пароль от почты, как его скрыть?
3. info1i 249 03.06.21 12:50 Сейчас в теме
(2) На тему скрытия пароля в скрипте пока отсутствуют идеи.
5. cmd_vasec 34 03.06.21 13:06 Сейчас в теме
Написано не универсально, если мне надо добавить диск или убрать, надо вникать в код и дописывать. Если в подключение возникает ошибка, то в логах ошибки нет.
6. info1i 249 03.06.21 13:52 Сейчас в теме
(5) Вникать в код обязательно в любом случае надо.
Функция ОтправитьПисьмо вызывается внутри Попытки, поэтому в логах ошибка должна остаться.
7. cmd_vasec 34 03.06.21 15:57 Сейчас в теме
(6) У меня в логах ошибки нет. В начале не могу понять почему не приходит письмо.
8. info1i 249 03.06.21 16:31 Сейчас в теме
(7) А лог пишется?
И на какой именно строке лог остановился?
Вполне возможно, что письмо отправлено успешно, но с запозданием приходит или что-то с почтовым сервером.
9. Pependos 30 07.09.21 13:43 Сейчас в теме
А есть ли возможность узнать свободное место на сетевом диске?
10. info1i 249 07.09.21 18:01 Сейчас в теме
(9) Не известно, нужно пробовать.
Однако любой сетевой диск - это ведь тоже диск, который является локальным на каком-то компьютере, на котором нужно устанавливать данный скрипт, так можно.
11. santey8602 04.03.22 10:24 Сейчас в теме
все здорово, работает. Но он постоянно присылает сообщения, неважно, кончается место или нет. так и должно быть? порог указал 10Гб. По факту больше 30 свободного места. просто заспамит почту)
Хотелось бы что бы сообщение приходило только тогда, когда места меньше указанного порога
12. info1i 249 04.03.22 12:26 Сейчас в теме
(11) Нет, так не должно быть: либо ошибка в подправленном коде, либо операционная система выдает ошибочный размер свободного места.
13. santey8602 05.03.22 08:49 Сейчас в теме
может потому что убрал везде диск Д?
как должен выглядеть код только с проверкой одного диска С?
14. info1i 249 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 249 27.01.23 13:48 Сейчас в теме
(16) Да, это функция. В 1С отсутствует. Присутствует только в OneScript.
17. Batman1978 27.01.23 13:38 Сейчас в теме
Можете дать СП по ней ?
Для отправки сообщения требуется регистрация/авторизация