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

77

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

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

6100 руб.

11.06.2026    890    2    0    

4

Мониторинг Системный администратор Разработчик 1С 8.3 Бесплатно (free)

Регламентное задание включено, расписание заполнено, ошибок в журнале регистрации нет, а данные не приходят. Проверьте у себя форму "Регламентные и фоновые операции": если в колонке результата пусто, это не значит, что всё хорошо, это значит, что задание не запускалось. Мы собрали стенд на копии рабочей УТ 11.5 и прошли все места, где задание застревает до своего кода: флаг блокировки на кластере, признак копии базы у БСП, пользователь в карточке задания, функциональная опция, расписание, которое не наступит. У каждого места код проверки. Самое неприятное подтвердилось на платформе 8.3.27: задание под пользователем, которого нет в базе, не оставляет в журнале регистрации ни одной строки. Плюс как по журналу отличить ручной запуск от запуска сервером и как увидеть задание, которое работает вхолостую.

30.09.2026    270    nedomolkov.ivan    0    

1

HighLoad оптимизация Администрирование СУБД Мониторинг Системный администратор Разработчик 1С 8.3 Абонемент ($m)

Разбор медленного запроса 1С на PostgreSQL 16: pg_stat_statements, отчет pg_profile за окно инцидента и postgresql.conf под OLTP. Установка, диагностика и отчеты из архива прогнаны на PostgreSQL 16.15 с pg_profile 4.16: сервер стартует с готовым конфигом, снимок создается, отчет сохраняется. Цифры кейса «Торговый контур» взяты с контура автора и на стенде не воспроизводились.

1 стартмани

30.09.2026    296    Ninel_S    0    

2

HighLoad оптимизация Мониторинг Системный администратор Разработчик 1С 8.3 Абонемент ($m)

64 семейства метрик и 95 рядов про кластер 1С, готовых к тому, чтобы их забрал Prometheus. Снимает их один файл PowerShell без зависимостей: он спрашивает кластер штатной утилитой rac через сервер администрирования RAS, к базе данных не обращается и паролей информационных баз не требует. На кластере, куда никто не входил, семейств 61: сеансовым метрикам не из чего взяться. Главное в поставке лежит рядом со скриптом - дашборд Grafana на 20 панелей, кусок scrape_configs и восемь правил тревоги. Дашборд не нарисован в теории: он импортирован на живом стенде тем же вызовом, которым это делает интерфейс, и дал 20 панелей из 20 с данными. promtool на выводе и на правилах проходит чисто, полный сбор занимает от 1,3 до 2,4 секунды.

10 стартмани

25.09.2026    283    0    nedomolkov.ivan    0    

2

Мониторинг Системный администратор Разработчик 1С 8.5 1С:Управление нашей фирмой 3.0 Россия Абонемент ($m)

Внешняя обработка. Назначение - узнать о неприятностях с базой не от раздраженных пользователей. Делалось на платформе 8.5.1.1150 и УНФ демо 3.0.14.123.

1 стартмани

25.09.2026    145    0    qazaz2    0    

3

Мониторинг Механизмы платформы 1С Системный администратор Разработчик Бесплатно (free)

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

18.09.2026    1015    nedomolkov.ivan    0    

1

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

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

25.08.2026    22944    mrXoxot    55    

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