Как отслеживать перезапуск rphost, ragent и rmngr с выводом причин?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как отслеживать перезапуск rphost, ragent и rmngr с выводом причин?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33780
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        есть скрипт который отслеживает перезапуск rphost ragent rmngr с выводом причины

      • #33781
        bot_avaOdin — Одинэсник
        Участник

          Да, существует возможность реализовать скрипт для отслеживания перезапуска процессов rphost, ragent и rmngr с выводом причины, но готового универсального скрипта «из коробки» обычно нет, так как причины перезапуска могут быть разными и зависят от логов и окружения.

          Общая идея решения:

          1. **Отслеживание состояния процессов**
          Скрипт периодически проверяет, запущены ли процессы rphost, ragent и rmngr (например, через `tasklist` или `Get-Process` в PowerShell).

          2. **Фиксация момента перезапуска**
          Если процесс перестал работать и затем запустился заново, фиксируется время перезапуска.

          3. **Анализ логов 1С и системных логов Windows**
          Для выяснения причины перезапуска скрипт анализирует:
          — Логи 1С (обычно в каталоге `%1C_Install%1Cv8log` или в каталоге информационной базы) — там могут быть ошибки, аварийные завершения, исключения.
          — Журналы событий Windows (Event Viewer), особенно Application и System, где могут быть записи о сбоях служб или приложений.

          4. **Вывод причины**
          Скрипт формирует отчет или выводит в консоль/файл наиболее вероятную причину перезапуска, основываясь на найденных ошибках в логах.

          ### Пример упрощенного PowerShell скрипта для отслеживания перезапуска rphost

          powershell
          # Путь к логам 1С (укажите свой)
          $logPath = "C:Program Files1cv81Cv8log"
          
          # Процессы для отслеживания
          $processes = @("rphost.exe", "ragent.exe", "rmngr.exe")
          
          # Файл для хранения состояния процессов
          $stateFile = "C:Temp1c_process_state.json"
          
          # Загрузка предыдущего состояния
          if (Test-Path $stateFile) {
              $prevState = Get-Content $stateFile | ConvertFrom-Json
          } else {
              $prevState = @{}
          }
          
          $currentState = @{}
          
          foreach ($proc in $processes) {
              $p = Get-Process -Name $proc -ErrorAction SilentlyContinue
              $isRunning = $p -ne $null
              $currentState[$proc] = $isRunning
          }
          
          # Проверка изменений состояния
          foreach ($proc in $processes) {
              if ($prevState.ContainsKey($proc)) {
                  if ($prevState[$proc] -and -not $currentState[$proc]) {
                      Write-Output "$(Get-Date): Процесс $proc остановлен"
                  }
                  if (-not $prevState[$proc] -and $currentState[$proc]) {
                      Write-Output "$(Get-Date): Процесс $proc запущен заново"
                      # Анализ логов для причины перезапуска
                      # Пример: поиск ошибок в логах за последние 10 минут
                      $timeLimit = (Get-Date).AddMinutes(-10)
                      $errorLines = Select-String -Path "$logPath*.log" -Pattern "error","exception","fatal" | Where-Object { $_.TimeCreated -ge $timeLimit }
                      if ($errorLines) {
                          Write-Output "В логах найдены ошибки, возможно причина перезапуска:"
                          $errorLines | ForEach-Object { Write-Output $_.Line }
                      } else {
                          Write-Output "Ошибок в логах за последние 10 минут не найдено."
                      }
                  }
              }
          }
          
          # Сохранение текущего состояния
          $currentState | ConvertTo-Json | Set-Content $stateFile
          

          ### Рекомендации по реализации

          — Запускайте такой скрипт по расписанию (например, через Планировщик задач Windows с интервалом 1-5 минут).
          — Для более точного анализа причин перезапуска дополнительно анализируйте системные журналы Windows (`Get-WinEvent`), особенно события с ошибками служб 1С.
          — Можно расширить скрипт, чтобы он отправлял уведомления (email, Telegram и т.п.) при перезапуске с указанием причины.
          — Для продвинутого мониторинга используйте специализированные средства мониторинга (Zabbix, PRTG, Nagios) с интеграцией логов 1С.

          ### Итог

          Готового универсального скрипта нет, но описанный подход позволяет создать собственное решение для отслеживания перезапуска rphost, ragent и rmngr с анализом причин на основе логов и событий Windows.

          Рекомендую посмотреть здесь:
          https://infostart.ru/public/867206/ — пример реализации защиты и мониторинга процессов 1С
          https://winitpro.ru/index.php/2019/10/02/blokirovka-rdp-atak-firewall-powershell/ — пример работы с логами Windows и PowerShell

          Если нужно, могу помочь с написанием более конкретного скрипта под ваши условия.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С