Как настроить скрипт оповещения о неработоспособности 1С и сервера приложений?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В распределенных системах, где используется связка «Сервер приложений 1С — Сервер клиентских приложений (RDP / RemoteApp) — Локальный ПК пользователя», периодически возникают сбои. Это могут быть сетевые разрывы, остановка служб кластера или проблемы на стороне СУБД. Часто техническая поддержка узнает о проблеме с задержкой — только после обращений пользователей. Проанализируем, как автоматизировать регулярную проверку доступности системы и настроить оперативное отправление почтовых уведомлений администраторам.

Вариант 1. Использование кроссплатформенного инструмента OneScript

Одним из самых эффективных и гибких подходов является создание автономного скрипта на языке 1С с помощью утилиты OneScript (OScript). Это решение не требует открытого веб-сервера или установленного Zabbix на стороне пользователя.

Разберем процесс настройки по шагам:

  1. Скачаем и установим среду выполнения OneScript на контрольный или клиентский ПК.
  2. Запустим командную строку от имени администратора и установим модуль работы с почтой командой:

    opm install InternetMail

  3. Напишем скрипт, который будет пытаться выполнить подключение к базе и в случае ошибки отправлять почтовое сообщение.

Рассмотрим пример проверки доступности хоста из 1С с помощью обращения к утилите MSScriptControl.ScriptControl и вызова VBScript-кода:


Попытка
    scrptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");
    scrptCtrl.language = "vbscript";
    scrptCtrl.addcode("
    |Function Avaible
    |Set objWMIService = GetObject(""winmgmts:{impersonationLevel=impersonate}"")
    |Set objPing = objWMIService.ExecQuery(""select * from Win32_PingStatus where address = '"+Hostname+"'"")
    |For Each objStatus in objPing
    |If IsNull(objStatus.StatusCode) Or objStatus.StatusCode <> 0 Then
    | Avaible = 0
    |Else
    | Avaible = 1
    |End If
    |Next
    |End function
    |");
    Доступен = scrptCtrl.Run("Avaible");
Исключение
    Доступен = Ложь;
КонецПопытки;

Вариант 2. Автоматизация и эмуляция действий через AutoIt

Если необходимо проверить всю цепочку подключения (от эмуляции терминального сеанса до ввода логина/пароля в окне авторизации 1С), воспользуемся утилитой AutoIt. Этот инструмент позволяет записывать и воспроизводить нажатия клавиш, клики мыши и отслеживать появление конкретных окон Windows.

Ссформируем поэтапный алгоритм работы проверки в AutoIt:

  1. Проверка сетевой доступности: Выполняем пинг сервера приложений. Если ответа нет, формируем лог и отправляем уведомление.
  2. Подключение к RDP / RemoteApp: Запускаем удаленное приложение. Если окно сессии не появилось за отведенный таймаут, фиксируем сбой терминального сервера.
  3. Запуск 1С:Предприятия: Запускаем клиент 1cv8c.exe, передаем учетные данные.
  4. Контроль окон ошибок: Отслеживаем появление диалоговых окон с текстом «Отказано в доступе», «Загузка базы невозможна» или «Ошибка выполнения запроса».
  5. Отправка отчета: Для отправки сообщений из консоли используем специализированную утилиту (например, smtpsender). Если все этапы прошли успешно, скрипт завершает работу без вызова тревоги.

Вариант 3. Пакетный запуск тонкого клиента 1С с ключом /Out

Для полноценной проверки авторизации в самой базе 1С без сложной эмуляции кликов мыши применим запуск тонкого клиента 1С в командном режиме с перенаправлением системных сообщений в лог-файл.

Посмотрим, как выглядит структура команды для проверки:

1cv8c.exe ENTERPRISE /S "Server1C\BaseName" /N "TestUser" /P "Password" /Out "C:\Logs\check_status.txt"

Разберем логику работы управляющего скрипта (PowerShell или CMD):

  1. Управляющий скрипт удаляет старый файл C:\Logs\check_status.txt.
  2. Запускает исполняемый файл 1cv8c.exe с указанными выше ключами.
  3. Устанавливает жесткий таймаут ожидания (например, 30–60 секунд). Если сервер 1С завис и процесс не завершился сам, скрипт принудительно завершает процесс 1cv8c.exe.
  4. Анализирует содержимое файла check_status.txt. Если в файле зафиксированы ошибки аутентификации, блокировки СУБД или отсутствие лицензий, отправляется e-mail администратору.

Вариант 4. Проверка специализированных TCP-портов служб 1С

Обычная команда ping проверяет только доступность сетевого интерфейса (ICMP-протокол), но не дает представления о состоянии процессов 1С. Чтобы убедиться, что службы кластера работают и принимают соединения, проверим открытые сетевые порты:

Выполнить точечную проверку порта можно с помощью команды PowerShell:

Test-NetConnection -ComputerName "Server1C" -Port 1541

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

← На главную