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

76

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

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

6100 руб.

11.06.2026    749    2    0    

4

DevOps и автоматизация разработки Мониторинг Тестирование QA Программист 1С:Предприятие 8 Бесплатно (free)

Платформа 1С давно вышла за рамки учетных систем. Сегодня это полноценная среда для создания сложных, высоконагруженных и распределенных приложений. А значит, и стек технологий современного разработчика кардинально изменился. Систематизируем весь инструментарий, который превращает 1С-программиста в инженера: от EDT и Git до автотестов на YAxUnit, контейнеризации приложений в Docker, мониторинга в Prometheus и организации шины данных на Kafka. Разберемся, зачем каждый инструмент нужен, как он вписывается в жизненный цикл разработки и с чего начать его внедрение.

25.08.2026    20037    mrXoxot    53    

81

Технологический журнал Мониторинг Мессенджеры и боты Системный администратор Программист 1С 8.3 1С 8.5 Россия Абонемент ($m)

Лёгкое расширение для 1С, которое ловит ошибки — включая упавшие внутри транзакции проведения и не замеченные типовыми средствами — и сразу шлёт алерты в Telegram и на почту. Не заимствует ни одного объекта конфигурации, ставится на любую базу (типовую или самописную, с БСП или без) за 5 минут. Дедуплицирует повторы, не спамит при шторме ошибок, маскирует персональные данные перед отправкой наружу. Работает даже при отключённом администратором штатном Журнале регистрации — у расширения есть собственный независимый журнал самодиагностики.

3 стартмани

25.08.2026    333    1    KonMa    0    

2

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

Мониторинг нагрузки кластера, который отвечает на человеческие вопросы: кто блокировал базу, кто грузил сервер, что было ночью. Диаграмма с именами людей вместо столбцов счётчиков. Штатный АдминистрированиеСервера, без rac.exe и COM, к СУБД не обращается. С регламентным сбором истории.

10 стартмани

25.08.2026    581    5    nedomolkov.ivan    2    

1

Файловый обмен (TXT, XML, DBF), FTP Мониторинг Системный администратор Программист 1С 8.3 Бесплатно (free)

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

25.08.2026    810    nedomolkov.ivan    0    

1

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

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

21.08.2026    1041    nedomolkov.ivan    0    

1

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

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

17.08.2026    1530    nedomolkov.ivan    4    

1
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 Сейчас в теме
Можете дать СП по ней ?
Для отправки сообщения требуется регистрация/авторизация