Перенаправление вывода журнала регистрации

07.08.23

База данных - Журнал регистрации

Экспериментируем с реализацией драйвера текстового устройства под Linux для перенаправления вывода журнала регистрации.

Общий тренд на усиление позиций Linux в отечественной IT-индустрии стимулирует более глубокое погружение, в том числе и в 1С-ном сообществе. По себе знаю, что переключаться после многолетнего опыта работы на Windows может быть достаточно проблематично. Как обычно, самый эффективный способ - это наличие реальных практических задач. Пусть даже бессмысленных и беспощадных, но дающих возможность руками пощупать, и получить результат. Далее предлагается рассмотреть и реализовать пример такой задачи.

Как известно, в концепции Linux/Unix "всё есть файлы". Это может быть мозголомным, но по факту очень полезным отличием от привычных сущностей в Windows. Что значит "все есть файлы"? Буквально это и значит. Файлы с данными, каталоги, настройки, сокеты, устройства, счетчики ресурсов и т.д. - все это в концепции ОС является файлами, пусть и с рядом особенностей. Даже информация и настройки самого ядра тоже представлена файлами, которые можно при желании модифицировать. И базовые операции с этими файлами выполняются одинаково. По мне так это очень удобно и клёво.

Как же мы можем использовать эту концепцию для эксплуатации систем на платформе 1С?

Давайте вспомним, как платформа работает, например, с логами журнала регистрации (далее ЖР) или настройками кластера: она выводит или читает данные в файлы. Удачное совпадение. На Инфостарте достаточно много публикаций по работе с файлами ЖР: различные приемы по сбору, консолидации, анализу, визуализации и т.д. Но, если не ошибаюсь, все они направлены на постобработку данных из файлов ЖР. Т.е. сначала платформа сохранила данные в файлы ЖР, а потом мы эти файлы читаем, и обрабатываем полученную информацию. Сразу определимся, что никаких претензий к такому подходу не имеем. Знаем, любим, практикуем.

Можно ли сделать иначе? Похоже, что да. Мы можем реализовать собственное устройство, представленное файлом в операционной системе, в который можно будет писать как в обычный файл ЖР. Эту гипотезу и будем проверять в нашем эксперименте.

 

Подготовка

Для эксперимента используем:

  • хост на Windows 11 x64
  • VirtualBox 7.0.10
  • гостевая ОС: образ ALT Linux Workstation 10.1 x64
  • актуальная на момент эксперимента платформа 8.3.23.1782 x64

Скачиваем с официальных сайтов VirtualBox, ALT Linux Workstation, разворачиваем  виртуальную машину 3 ядра, 2 Гб ОЗУ, 50 Гб hdd. Всё по дефолту, никаких особенных настроек, создаем пользователя user, запускаем ВМ. Кстати, ALT Linux на MATE выглядит вполне себе хорошо. Взял ОС сразу с графической оболочкой, чтобы там же тестировать запуск платформы.

На всякий случай обновим ядро. Можно сделать через меню: Меню (а-ля кнопка Пуск) -> Центр управления -> Администрирование -> Центр управления системой -> Обновление ядра -> Обновить ядро.

Запускаем терминал. Для удобства работы и порядка в каталоге пользователя user создает папку под проект. Назовем проект 1cv8lgf. В этом каталоге ведем всю разработку и сборку драйвера. Создаем в каталоге файл с кодом модуля и файл с правилами сборки.

mkdir /home/user/1cv8lgf
cd /home/user/1cv8lgf
touch 1cv8lgf.c
touch Makefile

 

Драйвер

Примеры реализации драйвера находим в сети по запросу "linux writing character device driver". Статей для изучения вполне достаточно, но если коротко по матчасти, то писать драйвер мы будет на C; каждый драйвер вне зависимости от типа имеет точку входа и выхода; конкретно драйвер текстового устройства должен содержать обработчики событий открытия, закрытия, записи и чтения. Код файла 1cv8lgf.c ниже:

 
1cv8lgf.c

Драйвер очень простой по функциональности: эмулирует файл, сохраняет в памяти строку длиной 100 символов, ее же и выводит для чтения. Для нашего эксперимента более чем достаточно.

 

Сборка

Код файла правил сборки Makefile. Обратите внимание, файл именуется с заглавной буквы.

obj-m := 1cv8lgf.o

all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Далее необходимо выполнить сборку модуля, инсталлировать и запустить наше устройство. В моей версии ОС потребовалось доустановить модули сборки и ядра. Переключаемся под root.

su -

Кстати, столкнулся с тем, что не работал sudo в ALT Linux. Помогла команда

control sudowheel enabled

Обновляем пакеты

apt-get update
apt-get upgrade

Доустанавливаем компилятор

apt-get install gcc

Доустанавливаем модули ядра

apt-cache search linux-headers
apt-cache search kernel-headers
apt-get install kernel-headers-modules*

Можно собирать модуль драйвера (вызываем команду, находясь в каталоге проекта)

make 1cv8lgf

В случае успеха получаем в каталоге проекта файлы 1cv8lgf.o или 1cv8lgf.ko. Загружаем  драйвер.

insmod 1cv8lgf.ko

Выгрузить драйвер можно через: rmmod 1cv8lgf.ko , но мы этого делать не будем, а просто возьмем на заметку. 

Проверить можно через просмотр загруженных модулей ...

cat proc/modules

// результат
...
1cv8lgf 16384 0 - Live 0xffffffffa0693000 (OE)
...

... или через список устройств.

cat /proc/devices

// результат
...
Character devices:
...
89 1cv8lgf
...

На всякий случай даем права на использование устройства.

chmod 666 /dev/1cv8lgf

Тестируем ввод/вывод через устройство: передаем на вход текстовую строку.

echo "test" >> /dev/1cv8lgf
cat /dev/1cv8lgf

// результат
test

При выводе содержимого получаем строку, которую и подавали на вход. Уже неплохо. Еще раз обращаю внимание на то, что с драйвером, как и со многими объектами ранее по тексту, мы работает как с обычным файлом.

Далее ставим платформу. На самом деле тут последовательность не существенна, платформу можно было поставить хоть с самого начала. Не нужен сервер и лицензии. Достаточно просто платформы. Да, при запуске мы получим сообщение об отсутствии лицензии, но запись в ЖР о новом сеансе уже все равно появится.

 

Тестируем устройство

Создаем новую пустую файловую базу в произвольном каталоге. Я складывал в /home/user/bases/testBase. Можно выполнить первый вход в базу, чтобы автоматически в каталоге базы создался каталог 1Cv8Log и сопутствующие файлы, а можно создать каталог руками. Если первый вход все же выполнен, то необходимо удалить из каталога /home/user/bases/testBase файл логов.

rm 1Cv8.lgf

Теперь необходимо создать ссылку на наше устройство в каталоге логов базы. Наименование ссылки будет соответствовать наименованию обычного файла логов "1Cv8.lgf", чтобы платформа находила там именно то, что и хотела. Дадим на всякий случай права на созданную ссылку.

ln -s /dev/1cv8lgf 1Cv8.lgf
chmod 666 1Cv8.lgf

В результате в каталоге /home/user/bases/testBase/1Cv8Log должен отображаться файл "1Cv8.lgf".  В интерфейсе он будет иметь небольшую стрелку в иконке, наподобие как у ярлыков в Windows. А при просмотре содержимого каталога через терминал увидим, куда ссылка ведет.

ls -l

// результат
...
... 1Cv8.lgf -> /dev/1cv8lgf
...

Запускаем нашу тестовую базу из /home/user/bases/testBase. У меня вываливалось сообщение об отсутствии лицензии, система заканчивала работу, и этого было достаточно. Проверяем, что же записалось в наше устройство ввода/вывода.

cat /dev/1cv8lgf

// результат
1CV8LOG(ver 2.0)
0524f209-de48-42e8-9df5-b183f06a26ee

{1,071523a4-516f-4fce-ba4b-0d11ab7a1893,"",1},
{2,"host-15",1},
{3,"1CV8",1},
{4,"_$Session$_.Authentication",1},
{13,1,1},
{4,"_$Session$_.Start",2},
{4,"_$Session$_.Finish",3}

Успех.

 

Выводы

Вот так, немного поэкспериментировав, мы поглубже погрузились в недра Linux, а также получили пищу для размышлений о том, какие еще возможности могут открываться. Кроме чувства удовлетворения от проделанной работы и результата, давайте пофантазируем, какая может быть реальная практическая польза от подобного драйвера текстового устройства:

- сама возможность получать логи ЖР "на лету" выглядит интересно; консолидация, мониторинг, алертинг, дата майнинг, машин лёрнинг.. Остапа понесло...

- можно сказать, что таким образом мы изобрели "новый" формат хранения ЖР ))) только для обработки и хранения кроме SQLite мы сможем использовать что душе угодно;

- как на счет редиректа логов ЖР через стандартный поток вывода из Docker?

- почему же речь только про логи ЖР? а как же технологический журнал? ведь там тоже файлы ))) кто хочет получать консолидированный поток данных логов ТЖ без необходимости "ковыряния" большого количества фалов?

Вступайте в нашу телеграмм-группу Инфостарт

linux driver device журнал регистрации эксперимент

См. также

Журнал регистрации Системный администратор 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

История изменений реквизитов и табличных частей справочников, документов, независимых регистров сведений, возможность отката изменения, восстановление удаленных объектов, сбор статистики использования базы 1С. Альтернативный журнал регистрации.

22800 руб.

22.02.2018    37424    61    55    

58

Журнал регистрации Системный администратор Программист 1С v8.3 1C:Бухгалтерия Платные (руб)

Журнал регистрации платформы 1С в SQL. Общая база хранения всех журналов. Через com-подключение регламентным заданием периодически догружает журналы регистраций из рабочих баз. Предоставляет настраиваемый доступ к журналам по правам подразделений. Формирует отчеты по пользователям и данным.

12000 руб.

23.05.2014    58155    53    17    

48

Администрирование веб-серверов Linux Системный администратор Программист 1С v8.3 Бесплатно (free)

Проблема: При переходе с Windows на Linux многие сталкиваются с затруднениями при настройке аутентификации ОС в веб-клиенте 1С через Apache 2.4 (Debian). Решение: Команда Magnit Tech (Центр экспертизы 1С и Сопровождение 1C) разработала готовую инструкцию по настройке веб-клиента 1С на Debian 12 с поддержкой как Windows, так и Linux-серверов. Экономьте время — внедряйте проверенное!

25.07.2025    5162    biryukmikh    40    

26

Linux Системный администратор Бесплатно (free)

Благодаря Ansible процесс развертывания и тонкой настройки сервера 1С на Linux можно полностью автоматизировать. В статье расскажем, как с помощью Ansible-плейбуков быстро и без ошибок подготовить инфраструктуру для работы 1С:Предприятие. Разберемся, как подготовить WSL для локального тестирования Ansible-сценариев перед их запуском на реальных серверах. Рассмотрим автоматизированное создание виртуальных машин с помощью Ansible, которое значительно ускоряет развертывание инфраструктуры. На практическом примере покажем, как дорабатывать роли в плейбуках для адаптации под конкретные задачи. Уделим внимание оптимизации Linux-сервера для 1С: настройке ОС, установке необходимых зависимостей и параметров для стабильной работы. Разберем процесс установки платформы 1С, настройки службы и логирования, а также интеграцию систем мониторинга (Zabbix и других) для контроля состояния сервера в реальном времени.

23.07.2025    2360    aidar_safin    0    

12

Linux Системный администратор Программист 1С v8.3 Бесплатно (free)

В очередной раз решая проблему с доступом к файлу программной лицензии - решил сделать памятку на будущее для себя и коллег.

10.03.2025    4181    unichkin    13    

14

Linux Системный администратор 1С v8.3 Россия Бесплатно (free)

Как устроить зависание системы (Ubuntu) из 1С (толстый клиент) с помощью буфера обмена и что с этим делать.

29.01.2025    2441    Klok22    6    

15

Linux Системный администратор Программист 1С v8.3 Бесплатно (free)

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

23.12.2024    3929    capitan    8    

16

Linux Системный администратор Программист 1С v8.3 Бесплатно (free)

Александр Кириллов, руководитель группы разработки компании «ИТ-Экспертиза», на конференции INFOSTART TECH EVENT 2024 выступил с докладом на тему «Как найти и устранить платформеннозависимый код менее, чем за 5 лет». Материал получился интересным и объемным, поэтому мы решили сделать на базе выступления Александра цикл статей. В первой части начнем с особенностей работы информационных систем 1С под управлением ОС Linux.

06.12.2024    4185    it-expertise    8    

26
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. gmw 1 12.08.23 14:54 Сейчас в теме
"Пусть даже бессмысленных и беспощадных" статья доказывает обратное.
Для отправки сообщения требуется регистрация/авторизация