<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.nntc.nnov.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Shogun+Sun</id>
	<title>wiki.nntc.nnov.ru - Вклад участника [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.nntc.nnov.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Shogun+Sun"/>
	<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Shogun_Sun"/>
	<updated>2026-10-18T11:48:59Z</updated>
	<subtitle>Вклад участника</subtitle>
	<generator>MediaWiki 1.32.0</generator>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=PK&amp;diff=11403</id>
		<title>PK</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=PK&amp;diff=11403"/>
		<updated>2026-06-19T09:25:52Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: /* Принтеры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Общий каталог для сканеров=&lt;br /&gt;
&lt;br /&gt;
==На сервере==&lt;br /&gt;
&lt;br /&gt;
 adduser share&lt;br /&gt;
&lt;br /&gt;
 passwd share&lt;br /&gt;
&lt;br /&gt;
 usermod -L share&lt;br /&gt;
&lt;br /&gt;
 smbpasswd -a share&lt;br /&gt;
 smbpasswd -e share&lt;br /&gt;
&lt;br /&gt;
 mkdir /home/share/kiocera&lt;br /&gt;
&lt;br /&gt;
 mkdir /home/share/konica&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/samba/smb.conf&lt;br /&gt;
# Global parameters&lt;br /&gt;
[global]&lt;br /&gt;
log file = /var/log/samba/log.%m&lt;br /&gt;
logging = file&lt;br /&gt;
map to guest = Bad User&lt;br /&gt;
max log size = 1000&lt;br /&gt;
obey pam restrictions = Yes&lt;br /&gt;
pam password change = Yes&lt;br /&gt;
panic action = /usr/share/samba/panic-action %d&lt;br /&gt;
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .&lt;br /&gt;
passwd program = /usr/bin/passwd %u&lt;br /&gt;
server role = standalone server&lt;br /&gt;
server string = %h server (Samba, Ubuntu)&lt;br /&gt;
unix password sync = Yes&lt;br /&gt;
usershare allow guests = Yes&lt;br /&gt;
idmap config * : backend = tdb&lt;br /&gt;
&lt;br /&gt;
[kiocera]&lt;br /&gt;
browseable = Yes&lt;br /&gt;
comment = share&lt;br /&gt;
valid users = share&lt;br /&gt;
create mask = 0755&lt;br /&gt;
directory mask = 0755&lt;br /&gt;
path = /home/share/kiocera&lt;br /&gt;
read only = No&lt;br /&gt;
&lt;br /&gt;
[konica]&lt;br /&gt;
browseable = Yes&lt;br /&gt;
comment = share&lt;br /&gt;
valid users = share&lt;br /&gt;
create mask = 0755&lt;br /&gt;
directory mask = 0755&lt;br /&gt;
path = /home/share/konica&lt;br /&gt;
read only = No&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==На клиенте==&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/samba/sambacreds &lt;br /&gt;
 username=share&lt;br /&gt;
 password=share&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 mkdir /home/pk/kiocera&lt;br /&gt;
 mkdir /home/pk/konica&lt;br /&gt;
&lt;br /&gt;
 echo '//192.168.7.100/kiocera /home/pk/kiocera cifs uid=pk,credentials=/etc/samba/sambacreds 0 0' &amp;gt;&amp;gt; /etc/fatab&lt;br /&gt;
 echo '//192.168.7.100/konica /home/pk/konica cifs uid=pk,credentials=/etc/samba/sambacreds 0 0' &amp;gt;&amp;gt; /etc/fatab&lt;br /&gt;
&lt;br /&gt;
 mount -a&lt;br /&gt;
&lt;br /&gt;
=Принтеры=&lt;br /&gt;
==Отключение автоматического обнаружения==&lt;br /&gt;
&lt;br /&gt;
Откройте конфигурационный файл в текстовом редакторе (например, nano):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo nano /etc/avahi/avahi-daemon.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В секции [server] найдите параметры use-ipv4 и use-ipv6 и установите для них значение no, чтобы запретить обнаружение принтеров по соответствующим протоколам:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[server]&lt;br /&gt;
use-ipv4=no&lt;br /&gt;
use-ipv6=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сохраните изменения и закройте редактор. Перезапустите устройство:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11396</id>
		<title>1c</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11396"/>
		<updated>2026-06-15T12:11:51Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: /* Включение поддержки OData */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=В GNU/Linux=&lt;br /&gt;
&lt;br /&gt;
==Установка учебной платформы 8.5.x на ОС Альт Стартеркит p11 GNOME==&lt;br /&gt;
&lt;br /&gt;
===Обновить ОС и ядро===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get update -y &amp;amp;&amp;amp; apt-get dist-upgrade -y &amp;amp;&amp;amp; update-kernel -y&lt;br /&gt;
&lt;br /&gt;
===Поставить пакеты===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get install -f alt-tour evince firefox libwebkit2gtk 1c-preinstall-full libglui&lt;br /&gt;
&lt;br /&gt;
===Включить sudo su===&lt;br /&gt;
&lt;br /&gt;
Раскоментировать в файле:&lt;br /&gt;
&lt;br /&gt;
 /etc/sudoers&lt;br /&gt;
&lt;br /&gt;
строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
или строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) NOPASSWD: ALL&lt;br /&gt;
&lt;br /&gt;
(если необходимо выполнять sudo su без пароля)&lt;br /&gt;
&lt;br /&gt;
===Установить платформу===&lt;br /&gt;
&lt;br /&gt;
Предполагается, что есть файл установки платформы:&lt;br /&gt;
&lt;br /&gt;
 setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Тогда установка осуществляетс следующим образом:&lt;br /&gt;
&lt;br /&gt;
 chmod +x setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
 sudo ./setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Далее следуем инструкциям установщика. В установщике необходимо выбрать пункты &amp;quot;Установить ярлыки&amp;quot; и &amp;quot;Зависимости&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Установщик сам переключится в режим текстового интерфейса, если не найдёт дисплей (например, при установке по ssh). А вообще он имеет графический интерфейс...&lt;br /&gt;
&lt;br /&gt;
===Починить запуск платформы (актуально для ОС Альт веток p10 и p11 как минимум)===&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Получилось? Если да, то странно... Должна быть такая ошибка:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libicuuc.so.74)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjxl.so.0.11)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_12.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_13.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
&lt;br /&gt;
Не такая ошибка? Если да, то вы точно все пункты до этого выполнили (точно пакеты все установлены, которые выше в команде установки пакетовв перечислены)?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если ошибка такая, то чиним:&lt;br /&gt;
&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить ещё раз:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Всё должно работать. Теперь можно запускать платформу посредством ярлыков (кнопок меню приложений)&lt;br /&gt;
&lt;br /&gt;
По прежнему не запускается? Если да, то спешим на встречу новым приключениям!&lt;br /&gt;
&lt;br /&gt;
===Переопределить настройки по умолчанию для ОС Альт===&lt;br /&gt;
&lt;br /&gt;
====Каталог для файловых баз данных платформы 1С и sgid-bit====&lt;br /&gt;
&lt;br /&gt;
Поскольку полный путь до каталога с файловой базой данных будет фигурировать в конфигурационных файлах веб-сервера, его рекомендуется сделать отличным от пути по умолчанию, который предлагает платформа 1С (потому что в пути по умолчанию могут быть пробелы и кириллица).&lt;br /&gt;
&lt;br /&gt;
Например, так:&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/bases&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При публикации базы данных через веб-сервер необходимо чтобы у процесса веб-сервера, запущенного от пользователя&lt;br /&gt;
&lt;br /&gt;
 apache2&lt;br /&gt;
&lt;br /&gt;
был доступ на чтение и запись в каталог с базой данных конфигурации 1С.&lt;br /&gt;
&lt;br /&gt;
Один из вариантов это сделать следующий:&lt;br /&gt;
&lt;br /&gt;
1. Разрешаем членам группы-владельца каталога чтение и запись&lt;br /&gt;
&lt;br /&gt;
 sudo chmod g+rwx /home/user/bases -R&lt;br /&gt;
&lt;br /&gt;
2. Устанавливаем sgid бит на каталог&lt;br /&gt;
&lt;br /&gt;
 sudo chmod g+s /home/user/bases -R&lt;br /&gt;
&lt;br /&gt;
3. Добавляем пользователя apache2 в группу-владельца каталога&lt;br /&gt;
&lt;br /&gt;
 sudo usermod -aG user apache2&lt;br /&gt;
&lt;br /&gt;
==Публикация REST/Odata на веб-сервере==&lt;br /&gt;
&lt;br /&gt;
Предполагается что до этого были выполнены все действия в предыдущем разделе...&lt;br /&gt;
&lt;br /&gt;
===Устанавливаем и включаем веб-сервер apache2===&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install -y apache2&lt;br /&gt;
 sudo systemctl enable --now httpd2&lt;br /&gt;
&lt;br /&gt;
===Создаём симлинк для httpd2===&lt;br /&gt;
&lt;br /&gt;
Для скриптов платформы 1С это важно...&lt;br /&gt;
&lt;br /&gt;
 sudo ln -s /sbin/httpd2 /sbin/httpd&lt;br /&gt;
&lt;br /&gt;
===Публикуем командой===&lt;br /&gt;
&lt;br /&gt;
Сначала создаём файл (оно само не может):&lt;br /&gt;
&lt;br /&gt;
 sudo touch /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
Потом публикуем:&lt;br /&gt;
&lt;br /&gt;
 sudo HOME=/home/user /opt/1cv8t/x86_64/8.5.1.1150/webinstt -apache24 -wsdir odata_base -dir /var/www/odata_base -connstr &amp;quot;File=/home/user/bases/base1;&amp;quot; -confPath /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
В ответ должно прийти что-то типа этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация выполнена&lt;br /&gt;
&lt;br /&gt;
или этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация обновлена&lt;br /&gt;
&lt;br /&gt;
Примерное содержимое файла в контексте конфигурационных файлов веб-сервера apache2:&lt;br /&gt;
&lt;br /&gt;
 cat /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LoadModule _1cws_module &amp;quot;/opt/1cv8t/x86_64/8.5.1.1150/wsap24t.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 1c publication&lt;br /&gt;
Alias &amp;quot;/odata_base&amp;quot; &amp;quot;/var/www/odata_base/&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/odata_base/&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride All&lt;br /&gt;
    Options None&lt;br /&gt;
    Require all granted&lt;br /&gt;
    SetHandler 1c-application&lt;br /&gt;
    ManagedApplicationDescriptor &amp;quot;/var/www/odata_base/default.vrd&amp;quot;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Исправляем группу-владельца на файл ===&lt;br /&gt;
&lt;br /&gt;
По каким-то причинам после выполнения публикации утилитой webinstt файл:&lt;br /&gt;
&lt;br /&gt;
 /var/www/odata_base/default.vrd&lt;br /&gt;
&lt;br /&gt;
имеет группу-владельца:&lt;br /&gt;
&lt;br /&gt;
 apache&lt;br /&gt;
&lt;br /&gt;
(привет разработчикам платформы 1С, ориентирующимся, поди, на Ubuntu, а не на ОС из реестра минцифры)...&lt;br /&gt;
&lt;br /&gt;
Исправляем:&lt;br /&gt;
&lt;br /&gt;
 sudo chgrp apache2 /var/www/odata_base/default.vrd&lt;br /&gt;
&lt;br /&gt;
===Исправляем параметр в конфигурации сервиса===&lt;br /&gt;
&lt;br /&gt;
Исправляем значение параметра:&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i 's/ProtectHome=yes/ProtectHome=no/g' /lib/systemd/system/httpd2.service&lt;br /&gt;
&lt;br /&gt;
После этого перезагрузим демона systemd и сервис httpd2&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
 sudo systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
Перед редактированием конфигурации необходимо передать права на папку публикации самому веб-серверу. По умолчанию она может быть закрыта для него. Если этого не сделать, веб-сервер не сможет прочитать файл настроек default.vrd и вернет ошибку доступа при обращении к базе через браузер.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R apache2: /var/www/odata_base&lt;br /&gt;
chmod -R 755 /var/www/odata_base&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Домашние каталоги пользователей (например, /home/user/) по умолчанию полностью изолированы от системных служб. Чтобы веб-сервер apache2 смог добраться до папки с базой данных, ему нужно дать разрешение на «транзитный проход» сквозь вышестоящие директории. Флаг +x для папок как раз открывает эту возможность, не нарушая при этом приватность остальных личных файлов пользователя.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chmod a+x /home/user/&lt;br /&gt;
sudo chmod a+x /home/user/bases/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перед конфигурацией OData необходимо также предоставить веб-серверу права на чтение и запись внутри папки с самой базой. Чтобы не нарушать логику прав Linux и оставить пользователя владельцем файлов, мы добавляем apache2 в его группу и выставляем права 775 совместно с флагом SGID. Это позволит платформе беспрепятственно создавать файлы блокировок (.1CL), а новые файлы будут автоматически наследоваться группой.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chmod -R 2775 /home/user/bases/base1/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Перезапускаем веб-сервер===&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
===Проверяем публикацию===&lt;br /&gt;
Идём браузером по адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако данная веб-страница возвращает внутреннюю ошибку платформы 1С. По всей видимости, в текущем режиме совместимости конфигурации графический модуль для отображения данного стандартного окна не генерируется веб-сервером (отсутствуют необходимые JS-скрипты для рендеринга интерфейса).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&amp;quot;#exception&amp;quot;:&amp;quot;{http://v8.1c.ru/8.2/virtual-resource-system}Exception&amp;quot;,&amp;quot;exception&amp;quot;:{&amp;quot;clsid&amp;quot;:&amp;quot;580392e6-ba49-4280-ac67-fcd6f2180121&amp;quot;,&amp;quot;reason&amp;quot;:404,&amp;quot;descr&amp;quot;:&amp;quot;HTTP: Not found\nError executing the query GET to resource /en/scripts/mod_bootstrap_bootstrap.js:&amp;quot;,&amp;quot;category&amp;quot;:&amp;quot;00000000000000000000000000&amp;quot;,&amp;quot;creationStack&amp;quot;:&amp;quot;mngsrvt:0x0000000000252DF5 mngsrvt:0x000000000024F8F4 vrsbaset:0x00000000006D7791 vrsbaset:0x00000000006540C5 vrsbaset:0x00000000006EBDE6 vrsbaset:0x00000000006D2A9C vrsbaset:0x00000000006EC4A9 vrsbaset:0x00000000006ED4A0 core85t:0x00000000008D4EBF core85t:0x00000000006B238C libc.so:0x0000000000000000 libc.so:0x0000000000000000 &amp;quot;}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ещё один привет разработчикам платформы 1С, по всей видимости, совсем не ориентирующимся на ОС на базе GNU/Linux, раз в учебной версии под GNU/Linux с веб-интерфейсом что-то не так).&lt;br /&gt;
&lt;br /&gt;
НО!&lt;br /&gt;
&lt;br /&gt;
Это не помешает нам работать с OData REST!&lt;br /&gt;
&lt;br /&gt;
===Включение поддержки OData===&lt;br /&gt;
&lt;br /&gt;
Любым текстовым редактором открываем конфигурационный файл публикации:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /var/www/odata_base/default.vrd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Внутри тега &amp;lt;standardOdata&amp;gt; меняем значение параметра enable с false на true:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итоговый вид файла default.vrd:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;point xmlns=&amp;quot;http://v8.1c.ru/8.2/virtual-resource-system&amp;quot;&lt;br /&gt;
                xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
                xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
                base=&amp;quot;/odata_base&amp;quot;&lt;br /&gt;
                ib=&amp;quot;File=/home/user/bases/base1;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ws pointEnableCommon=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        reuseSessions=&amp;quot;autouse&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;20&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;10&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;analytics enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;1200&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;500&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/point&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В блоке&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        reuseSessions=&amp;quot;autouse&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;20&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;10&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
измените значения параметров на&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
reuseSessions=&amp;quot;dontuse&amp;quot;&lt;br /&gt;
sessionMaxAge=&amp;quot;0&amp;quot;&lt;br /&gt;
poolSize=&amp;quot;0&amp;quot;&lt;br /&gt;
poolTimeout=&amp;quot;0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это решит проблему блокировки REST-сервиса на учебной версии 1С. При стандартных настройках веб-сервер удерживает соединения в пуле. Из-за этого даже при малом таймауте (sessionMaxAge) несколько идущих подряд запросов порождают новые параллельные сессии, что запрещено ограничениями учебной платформы (доступен только 1 сеанс). Обнуление пула гарантирует, что сессия будет закрываться сразу после выдачи данных.&lt;br /&gt;
&lt;br /&gt;
После изменения конфигурации перезапускаем службу веб-сервера для применения настроек:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart httpd2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки доступности интерфейса OData отправляем GET-запрос по адресу:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/odata/standard.odata?$format=json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример успешного ответа (корневой контейнер для пустой информационной базы):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;service xml:base=&amp;quot;http://localhost/odata_base/odata/standard.odata&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;workspace&amp;gt;&lt;br /&gt;
&amp;lt;atom:title&amp;gt;Default&amp;lt;/atom:title&amp;gt;&lt;br /&gt;
&amp;lt;/workspace&amp;gt;&lt;br /&gt;
&amp;lt;/service&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Внесение объектов в OData===&lt;br /&gt;
====Шаг 1. Создание внешней обработки====&lt;br /&gt;
Запустите Конфигуратор 1С, выберите в главном меню '''Файл''' -&amp;gt; '''Новый...''' и в открывшемся списке выберите '''Внешняя обработка'''.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-1.png|thumb|center|900px|Создание новой внешней обработки в Конфигураторе]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-2.png|thumb|center|900px|Выбор типа создаваемого документа]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 2. Настройка свойств и создание формы====&lt;br /&gt;
В открывшемся окне свойств новой обработки выполните следующие действия:&lt;br /&gt;
# '''Имя''': Задайте понятное имя (например, `НастройкаOData`).&lt;br /&gt;
# '''Создание формы''': Перейдите на вкладку '''Формы''' и нажмите на кнопку «Добавить», чтобы создать основную форму обработки. На этой форме мы разместим кнопку и пропишем логику внесения объектов в OData.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-3.png|thumb|center|900px|Настройка имени обработки и инициализация создания формы]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 3. Добавление команды и программного кода====&lt;br /&gt;
В редакторе формы перейдите на вкладку '''Команды''' (в правой части экрана) и добавьте новую команду формы, задав ей имя (например, `ВыполнитьНастройку`). &lt;br /&gt;
&lt;br /&gt;
Перетащите созданную команду мышкой в левую верхнюю часть окна — в структуру элементов формы, чтобы она превратилась в физическую кнопку. &lt;br /&gt;
&lt;br /&gt;
После этого нажмите правой кнопкой мыши по кнопке в левой части, выберите пункт '''Действие команды''' и в выпадающем меню выберите вариант: '''Создать на клиенте и процедуру на сервере без контекста'''.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-4.png|thumb|center|900px|Проектирование интерфейса формы и привязка клиент-серверного действия к кнопке]]&lt;br /&gt;
&lt;br /&gt;
* '''1''' — Кнопка добавления на вкладке «Команды» в правой панели, с помощью которой создается новая команда формы.&lt;br /&gt;
* '''2''' — Элемент формы в левой панели (структура элементов), получившийся в результате перетаскивания команды мышкой из правой части.&lt;br /&gt;
* '''3''' — Пункт контекстного меню '''Действие команды''', открывающийся по правому клику мыши на перенесенном элементе для генерации шаблонов процедур.&lt;br /&gt;
&lt;br /&gt;
В модуле формы замените сгенерированные шаблоны процедур следующим кодом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;НаКлиенте&lt;br /&gt;
Процедура ВыполнитьНастройку(Команда)&lt;br /&gt;
    ВыполнитьНастройкуНаСервере();&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
&lt;br /&gt;
&amp;amp;НаСервереБезКонтекста&lt;br /&gt;
Процедура ВыполнитьНастройкуНаСервере()&lt;br /&gt;
    // 1. Создаем массив для объектов, которые пойдут в веб-сервис&lt;br /&gt;
    МассивОбъектов = Новый Массив;&lt;br /&gt;
    &lt;br /&gt;
    // 2. Добавляем в массив необходимый справочник (например, Сотрудники)&lt;br /&gt;
    МассивОбъектов.Добавить(Метаданные.Справочники.Сотрудники);&lt;br /&gt;
    &lt;br /&gt;
    // 3. Передаем этот массив платформе для регистрации в OData&lt;br /&gt;
    УстановитьСоставСтандартногоИнтерфейсаOData(МассивОбъектов);&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Шаг 4. Сохранение обработки====&lt;br /&gt;
Закройте окна редактора формы и программного модуля. Вернувшись в основное окно создания внешней обработки, нажмите кнопку '''Закрыть'''. Платформа автоматически предложит сохранить изменения — выберите удобный каталог на диске и сохраните файл обработки (с расширением `.epf`).&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-5.png|thumb|center|900px|Процесс сохранения внешней обработки на диск]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 5. Запуск обработки в режиме предприятия====&lt;br /&gt;
Запустите 1С:Предприятие. В главном меню выберите '''Файл''' -&amp;gt; '''Открыть...''', найдите сохраненную ранее внешнюю обработку и откройте её. Если система безопасности выдаст предупреждение о потенциальной опасности подключаемого модуля, согласитесь с рисками и подтвердите открытие.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-6.png|thumb|center|900px|Открытие файла внешней обработки через пользовательский интерфейс 1С]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 6. Инициализация OData====&lt;br /&gt;
На экране появится созданная нами форма. Нажмите на ней кнопку '''Выполнить настройку'''. В этот момент отработает заложенная нами серверная логика, и состав стандартного интерфейса OData обновится. После этого обработку и само приложение 1С можно закрывать.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-7.png|thumb|center|900px|Финальное выполнение логики обработки по нажатию кнопки]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 7. Проверка доступности объектов в OData====&lt;br /&gt;
Чтобы убедиться, что внешняя обработка успешно зарегистрировала наши метаданные в веб-сервисе, откройте браузер и повторно отправьте GET-запрос по уже знакомому адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/odata/standard.odata&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если всё сделано правильно, в ответе от сервера (в формате JSON или XML, в зависимости от настроек) вместо пустого корневого контейнера вы увидите структуру метаданных, содержащую зарегистрированный нами справочник. &lt;br /&gt;
&lt;br /&gt;
Внутри тега `&amp;lt;workspace&amp;gt;` появится коллекция доступных сущностей (EntitySet), среди которых будет фигурировать URL для работы со справочником сотрудников: `Catalog_Сотрудники`.&lt;br /&gt;
&lt;br /&gt;
==Автоматизация резервного копирования информационных баз==&lt;br /&gt;
&lt;br /&gt;
Предполагается, что платформа &amp;quot;1С Предприятие&amp;quot; работает на GNU/Linux системе и скрипт резервного копирования выполняется от пользователя&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
, графическое окружение которого автоматически запускается после загрузки компьютера.&lt;br /&gt;
&lt;br /&gt;
Дело в том, что по каким-то причинам, разработчики платформы &amp;quot;1С Предприятие&amp;quot; не заложили в систему запуск резервного копирования в headless-режиме, поэтому платформе необходим дисплей X-сервера.&lt;br /&gt;
&lt;br /&gt;
Также предполагается, что файл с паролем от пользователя платформы &amp;quot;1С Предприятие&amp;quot;, которому разрешено выполнять резервное копирование, хранится в файле&lt;br /&gt;
&lt;br /&gt;
 /home/administrator/.1c-cluster-infobases-backup.pass&lt;br /&gt;
&lt;br /&gt;
и рекомендуемые права на этот файл&lt;br /&gt;
&lt;br /&gt;
 0400&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Подготовка каталога для скриптов===&lt;br /&gt;
&lt;br /&gt;
 mkdir /opt/1c_backup_scripts&lt;br /&gt;
&lt;br /&gt;
===Базовый скрипт===&lt;br /&gt;
&lt;br /&gt;
При необходимости, в тексте скрипта, отредактируйте строчку&lt;br /&gt;
&lt;br /&gt;
 bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
, указав путь до конкретной версии платформы &amp;quot;1С Предприятие&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже предоставлен текст, который можно выделить, скопировать в текстовый редактор, при необходимости поправить, затем весь этот текст можно бросить в консоль для создания файла посредством heredoc-синтаксиса:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup_infobase_1c_generic.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export LANG=ru_RU.UTF-8&lt;br /&gt;
&lt;br /&gt;
NON_ROOT_USER=&amp;quot;administrator&amp;quot;&lt;br /&gt;
DISPLAY=&amp;quot;:0&amp;quot;&lt;br /&gt;
STORAGE=&amp;quot;${1}&amp;quot;&lt;br /&gt;
SRV=&amp;quot;${2}&amp;quot;&lt;br /&gt;
REF=&amp;quot;${3}&amp;quot;&lt;br /&gt;
LOGIN=&amp;quot;${4}&amp;quot;&lt;br /&gt;
PASSWORD_FILE=&amp;quot;${5}&amp;quot;&lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;${6}&amp;quot;&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;${7}&amp;quot;&lt;br /&gt;
TIMEOUT_COUNTER=0&lt;br /&gt;
LOCK_FILE_PATH=&amp;quot;/home/usr1cv8/.1cv8/1C/1cv8/reg_1541/snccntx8e79a393-c2af-4fd7-b25a-af6b5ed19bfa/snccntx.dat&amp;quot;&lt;br /&gt;
#-----------------------------&lt;br /&gt;
export DISPLAY=&amp;quot;${DISPLAY}&amp;quot;&lt;br /&gt;
bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
PASSWORD=`cat ${PASSWORD_FILE} | head -1`&lt;br /&gt;
infobase_suffix=&amp;quot;$(date +%Y-%m-%d-%H-%M-%S).dt&amp;quot;&lt;br /&gt;
TMP_STORAGE=&amp;quot;/opt/1c_backup_scripts/tmp_storage&amp;quot;&lt;br /&gt;
ib_tmp_filepath=&amp;quot;${TMP_STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_tmp_log=&amp;quot;${ib_tmp_filepath}.log&amp;quot;&lt;br /&gt;
ib_filepath=&amp;quot;${STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_log=&amp;quot;${ib_filepath}.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function rotate_backups(){&lt;br /&gt;
filenames_cmd=&amp;quot;${STORAGE}/${REF}*&amp;quot;&lt;br /&gt;
current_unixtime=`date +%s --date=&amp;quot;$(date +%Y-%m-%d) 00:00:00&amp;quot;`&lt;br /&gt;
test_unixtime=$(($current_unixtime-$KEEP_BACKUPS_FOR_LAST_DAYS*60*60*24))&lt;br /&gt;
&lt;br /&gt;
for f in $(/bin/ls $filenames_cmd); do&lt;br /&gt;
#echo &amp;quot;f=$f&amp;quot;&lt;br /&gt;
datetime_from_file=`echo ${f} | awk -F '__' {'print $2'} | awk -F '.' {'print $1'}`&lt;br /&gt;
#echo &amp;quot;datetime_from_file=${datetime_from_file}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#2023-12-24-22-01-02&lt;br /&gt;
Y=`echo ${datetime_from_file} | awk -F '-' {'print $1'}`&lt;br /&gt;
M=`echo ${datetime_from_file} | awk -F '-' {'print $2'}`&lt;br /&gt;
D=`echo ${datetime_from_file} | awk -F '-' {'print $3'}`&lt;br /&gt;
h=`echo ${datetime_from_file} | awk -F '-' {'print $4'}`&lt;br /&gt;
m=`echo ${datetime_from_file} | awk -F '-' {'print $5'}`&lt;br /&gt;
s=`echo ${datetime_from_file} | awk -F '-' {'print $6'}`&lt;br /&gt;
&lt;br /&gt;
unixtime_from_file=`date +%s --date=&amp;quot;${Y}-${M}-${D} ${h}:${m}:${s}&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
if [[ $unixtime_from_file -lt $test_unixtime ]]; then&lt;br /&gt;
  echo &amp;quot;delete file: ${f}&amp;quot;&lt;br /&gt;
  /bin/rm ${f}&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;keep file: ${f}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function wait(){&lt;br /&gt;
&lt;br /&gt;
  if [[ $TIMEOUT_COUNTER -ge $BACKUP_TIMEOUT_SEC ]]; then&lt;br /&gt;
    kill -9 ${1}&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  if [ ! -d /proc/${1}/ ]; then&lt;br /&gt;
    nice_text=&amp;quot;Выгрузка информационной базы успешно завершена&amp;quot;&lt;br /&gt;
    res_text=$(grep -o -i &amp;quot;${nice_text}&amp;quot; ${ib_tmp_log})&lt;br /&gt;
&lt;br /&gt;
    # start apache2&lt;br /&gt;
    sudo systemctl start httpd2&lt;br /&gt;
&lt;br /&gt;
    if [ &amp;quot;${res_text}&amp;quot; = &amp;quot;${nice_text}&amp;quot; ]; then&lt;br /&gt;
      /bin/cp ${ib_tmp_filepath} ${ib_filepath} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_filepath}&lt;br /&gt;
      /bin/cp ${ib_tmp_log} ${ib_log} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_log}&lt;br /&gt;
      #echo &amp;quot;TEST: ${ib_filepath} AND ${ib_log}&amp;quot;&lt;br /&gt;
      rotate_backups&lt;br /&gt;
      exit 0&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    exit 1&lt;br /&gt;
  fi&lt;br /&gt;
  #echo &amp;quot;pid alive: ${1}&amp;quot;&lt;br /&gt;
  sleep 1&lt;br /&gt;
  TIMEOUT_COUNTER=$(($TIMEOUT_COUNTER+1))&lt;br /&gt;
  wait ${1}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# prepare tmp storage&lt;br /&gt;
[ ! -d ${TMP_STORAGE} ] &amp;amp;&amp;amp; sudo mkdir &amp;quot;${TMP_STORAGE}&amp;quot; &amp;amp;&amp;amp; sudo chown administrator: &amp;quot;${TMP_STORAGE}&amp;quot; -R&lt;br /&gt;
&lt;br /&gt;
# stop apache2&lt;br /&gt;
sudo systemctl stop httpd2&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
# reset srv1cv8 sessions&lt;br /&gt;
sudo systemctl stop srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
sudo /bin/rm -f &amp;quot;${LOCK_FILE_PATH}&amp;quot;&lt;br /&gt;
sudo systemctl start srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
DISPLAY=:0 XAUTHORITY=/home/administrator/.Xauthority ${bin1c} CONFIG /N &amp;quot;${LOGIN}&amp;quot; /P &amp;quot;${PASSWORD}&amp;quot; /S &amp;quot;${SRV}/${REF}&amp;quot; /DumpIB &amp;quot;${ib_tmp_filepath}&amp;quot; /OUT &amp;quot;${ib_tmp_log}&amp;quot; &amp;amp;&lt;br /&gt;
main_process_pid=$!&lt;br /&gt;
&lt;br /&gt;
wait ${main_process_pid}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup_infobase_1c_generic.sh&lt;br /&gt;
&lt;br /&gt;
===Скрипт для резервирования конкретной базы данных===&lt;br /&gt;
Данный скрипт представляет из себя обёртку над выше приведённым скриптом, с заданием конкретных параметров резервирования&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup__my_super_infobase.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
### PARAMETERS ###&lt;br /&gt;
STORAGE=&amp;quot;/mnt/storage/my-1c-host-backups&amp;quot; # каталог для сохранения резервных копий&lt;br /&gt;
SRV=&amp;quot;my-1c-host&amp;quot;                          # хост, на котором работает платформа &amp;quot;1С: Предприятие&amp;quot;&lt;br /&gt;
REF=&amp;quot;my_super_infobase&amp;quot;                   # имя базы данных, которую резервируем&lt;br /&gt;
LOGIN=&amp;quot;backupuser&amp;quot;                        # 1с-пользователь, которому разрешено резервировать базу данных&lt;br /&gt;
PASSWORD_FILE=&amp;quot;/home/administrator/.1c-cluster-infobases-backup.pass&amp;quot; # в этом файле должен находиться только пароль от 1с-пользоателя &lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;2&amp;quot;            # сохранить резервные копии только за эти несколько последных дней (в текущем примере - за 2 последних дня)&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;300&amp;quot;                  # таймаут, в течение которого разрешено работать процессу резервирования (процессу платформы &amp;quot;1С: Предприятие&amp;quot;. Если за этот таймаут процесс не успел сделать резервную копию, то он снимается с выполнения)&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### BOT PARAMETERS&lt;br /&gt;
TELEGRAM_BOT_TOKEN=&amp;quot;&amp;quot;             # сюда нужно вписать токен телеграм-бота, который будет отсылать уведомления&lt;br /&gt;
TELEGRAM_DESTINATION_GROUP_ID=&amp;quot;&amp;quot;  # сюда нужно вписать идентификатор телеграм-пользователя или телеграм-группы (не забывайте про минус в начале, если это идентификатор группы), в которого (или в которую, если это группа) бот будет писать сообщения&lt;br /&gt;
&lt;br /&gt;
function send_message_telegram(){&lt;br /&gt;
#exit 0  # раскомментируйте эту строчку, если отсылка сообщений телеграм-ботом не нужна (следовательно, и параметры дя бота при этом можно не задавать)&lt;br /&gt;
message=${1}&lt;br /&gt;
curl -s -X POST \&lt;br /&gt;
     -H 'Content-Type: application/json' \&lt;br /&gt;
     -d &amp;quot;{\&amp;quot;chat_id\&amp;quot;: \&amp;quot;${TELEGRAM_DESTINATION_GROUP_ID}\&amp;quot;, \&amp;quot;text\&amp;quot;: \&amp;quot;${message}\&amp;quot;, \&amp;quot;disable_notification\&amp;quot;: true}&amp;quot; \&lt;br /&gt;
     https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage &amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### START ###&lt;br /&gt;
BASE=`dirname ${0}`&lt;br /&gt;
${BASE}/backup_infobase_1c_generic.sh &amp;quot;${STORAGE}&amp;quot; &amp;quot;${SRV}&amp;quot; &amp;quot;${REF}&amp;quot; &amp;quot;${LOGIN}&amp;quot; &amp;quot;${PASSWORD_FILE}&amp;quot; &amp;quot;${KEEP_BACKUPS_FOR_LAST_DAYS}&amp;quot; &amp;quot;${BACKUP_TIMEOUT_SEC}&amp;quot;&lt;br /&gt;
res=$?&lt;br /&gt;
&lt;br /&gt;
if [ ${res} -eq 0 ]; then&lt;br /&gt;
send_message_telegram &amp;quot;[Успешно]\nРезервное копирование информационной базы '${REF}' выполнено успешно&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
send_message_telegram &amp;quot;[Ошибка]\nРезервное копирование информационной базы '${REF}' не выполнено&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&lt;br /&gt;
===Ставим задачу для планировщика cron===&lt;br /&gt;
&lt;br /&gt;
Под пользователем&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
в терминале открываем временный файл для настройки crontab&lt;br /&gt;
&lt;br /&gt;
 EDITOR=nano crontab -e&lt;br /&gt;
&lt;br /&gt;
в результате редактором&lt;br /&gt;
&lt;br /&gt;
 nano&lt;br /&gt;
&lt;br /&gt;
будет открыт временный файл для установки параметров планировщика для текущего пользователя. Отредактировав и сохранив (Ctrl+O - Enter) изменения в этом файле и закрыв редактор (Ctrl+X) будет сконфигурирован планировщик для текущего пользователя.&lt;br /&gt;
&lt;br /&gt;
Проверить корректность заданных параметров планировщика можно выполнением команды&lt;br /&gt;
&lt;br /&gt;
 crontab -l&lt;br /&gt;
&lt;br /&gt;
В случае, если планировщик был сконфигурирован на запуск скрипта резервного копирования каждые сутки с 23:01, вывод команды проверки должен быть примерно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#minute (0-59),&lt;br /&gt;
#|	hour (0-23),&lt;br /&gt;
#|	|	day of the month (1-31),&lt;br /&gt;
#|	|	|	month of the year (1-12),&lt;br /&gt;
#|	|	|	|	day of the week (0-6 with 0=Sunday).&lt;br /&gt;
#|	|	|	|	|	commands&lt;br /&gt;
1       23	*	*	*	/opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11395</id>
		<title>1c</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11395"/>
		<updated>2026-06-15T12:10:50Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: /* Включение поддержки OData */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=В GNU/Linux=&lt;br /&gt;
&lt;br /&gt;
==Установка учебной платформы 8.5.x на ОС Альт Стартеркит p11 GNOME==&lt;br /&gt;
&lt;br /&gt;
===Обновить ОС и ядро===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get update -y &amp;amp;&amp;amp; apt-get dist-upgrade -y &amp;amp;&amp;amp; update-kernel -y&lt;br /&gt;
&lt;br /&gt;
===Поставить пакеты===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get install -f alt-tour evince firefox libwebkit2gtk 1c-preinstall-full libglui&lt;br /&gt;
&lt;br /&gt;
===Включить sudo su===&lt;br /&gt;
&lt;br /&gt;
Раскоментировать в файле:&lt;br /&gt;
&lt;br /&gt;
 /etc/sudoers&lt;br /&gt;
&lt;br /&gt;
строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
или строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) NOPASSWD: ALL&lt;br /&gt;
&lt;br /&gt;
(если необходимо выполнять sudo su без пароля)&lt;br /&gt;
&lt;br /&gt;
===Установить платформу===&lt;br /&gt;
&lt;br /&gt;
Предполагается, что есть файл установки платформы:&lt;br /&gt;
&lt;br /&gt;
 setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Тогда установка осуществляетс следующим образом:&lt;br /&gt;
&lt;br /&gt;
 chmod +x setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
 sudo ./setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Далее следуем инструкциям установщика. В установщике необходимо выбрать пункты &amp;quot;Установить ярлыки&amp;quot; и &amp;quot;Зависимости&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Установщик сам переключится в режим текстового интерфейса, если не найдёт дисплей (например, при установке по ssh). А вообще он имеет графический интерфейс...&lt;br /&gt;
&lt;br /&gt;
===Починить запуск платформы (актуально для ОС Альт веток p10 и p11 как минимум)===&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Получилось? Если да, то странно... Должна быть такая ошибка:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libicuuc.so.74)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjxl.so.0.11)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_12.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_13.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
&lt;br /&gt;
Не такая ошибка? Если да, то вы точно все пункты до этого выполнили (точно пакеты все установлены, которые выше в команде установки пакетовв перечислены)?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если ошибка такая, то чиним:&lt;br /&gt;
&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить ещё раз:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Всё должно работать. Теперь можно запускать платформу посредством ярлыков (кнопок меню приложений)&lt;br /&gt;
&lt;br /&gt;
По прежнему не запускается? Если да, то спешим на встречу новым приключениям!&lt;br /&gt;
&lt;br /&gt;
===Переопределить настройки по умолчанию для ОС Альт===&lt;br /&gt;
&lt;br /&gt;
====Каталог для файловых баз данных платформы 1С и sgid-bit====&lt;br /&gt;
&lt;br /&gt;
Поскольку полный путь до каталога с файловой базой данных будет фигурировать в конфигурационных файлах веб-сервера, его рекомендуется сделать отличным от пути по умолчанию, который предлагает платформа 1С (потому что в пути по умолчанию могут быть пробелы и кириллица).&lt;br /&gt;
&lt;br /&gt;
Например, так:&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/bases&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При публикации базы данных через веб-сервер необходимо чтобы у процесса веб-сервера, запущенного от пользователя&lt;br /&gt;
&lt;br /&gt;
 apache2&lt;br /&gt;
&lt;br /&gt;
был доступ на чтение и запись в каталог с базой данных конфигурации 1С.&lt;br /&gt;
&lt;br /&gt;
Один из вариантов это сделать следующий:&lt;br /&gt;
&lt;br /&gt;
1. Разрешаем членам группы-владельца каталога чтение и запись&lt;br /&gt;
&lt;br /&gt;
 sudo chmod g+rwx /home/user/bases -R&lt;br /&gt;
&lt;br /&gt;
2. Устанавливаем sgid бит на каталог&lt;br /&gt;
&lt;br /&gt;
 sudo chmod g+s /home/user/bases -R&lt;br /&gt;
&lt;br /&gt;
3. Добавляем пользователя apache2 в группу-владельца каталога&lt;br /&gt;
&lt;br /&gt;
 sudo usermod -aG user apache2&lt;br /&gt;
&lt;br /&gt;
==Публикация REST/Odata на веб-сервере==&lt;br /&gt;
&lt;br /&gt;
Предполагается что до этого были выполнены все действия в предыдущем разделе...&lt;br /&gt;
&lt;br /&gt;
===Устанавливаем и включаем веб-сервер apache2===&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install -y apache2&lt;br /&gt;
 sudo systemctl enable --now httpd2&lt;br /&gt;
&lt;br /&gt;
===Создаём симлинк для httpd2===&lt;br /&gt;
&lt;br /&gt;
Для скриптов платформы 1С это важно...&lt;br /&gt;
&lt;br /&gt;
 sudo ln -s /sbin/httpd2 /sbin/httpd&lt;br /&gt;
&lt;br /&gt;
===Публикуем командой===&lt;br /&gt;
&lt;br /&gt;
Сначала создаём файл (оно само не может):&lt;br /&gt;
&lt;br /&gt;
 sudo touch /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
Потом публикуем:&lt;br /&gt;
&lt;br /&gt;
 sudo HOME=/home/user /opt/1cv8t/x86_64/8.5.1.1150/webinstt -apache24 -wsdir odata_base -dir /var/www/odata_base -connstr &amp;quot;File=/home/user/bases/base1;&amp;quot; -confPath /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
В ответ должно прийти что-то типа этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация выполнена&lt;br /&gt;
&lt;br /&gt;
или этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация обновлена&lt;br /&gt;
&lt;br /&gt;
Примерное содержимое файла в контексте конфигурационных файлов веб-сервера apache2:&lt;br /&gt;
&lt;br /&gt;
 cat /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LoadModule _1cws_module &amp;quot;/opt/1cv8t/x86_64/8.5.1.1150/wsap24t.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 1c publication&lt;br /&gt;
Alias &amp;quot;/odata_base&amp;quot; &amp;quot;/var/www/odata_base/&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/odata_base/&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride All&lt;br /&gt;
    Options None&lt;br /&gt;
    Require all granted&lt;br /&gt;
    SetHandler 1c-application&lt;br /&gt;
    ManagedApplicationDescriptor &amp;quot;/var/www/odata_base/default.vrd&amp;quot;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Исправляем группу-владельца на файл ===&lt;br /&gt;
&lt;br /&gt;
По каким-то причинам после выполнения публикации утилитой webinstt файл:&lt;br /&gt;
&lt;br /&gt;
 /var/www/odata_base/default.vrd&lt;br /&gt;
&lt;br /&gt;
имеет группу-владельца:&lt;br /&gt;
&lt;br /&gt;
 apache&lt;br /&gt;
&lt;br /&gt;
(привет разработчикам платформы 1С, ориентирующимся, поди, на Ubuntu, а не на ОС из реестра минцифры)...&lt;br /&gt;
&lt;br /&gt;
Исправляем:&lt;br /&gt;
&lt;br /&gt;
 sudo chgrp apache2 /var/www/odata_base/default.vrd&lt;br /&gt;
&lt;br /&gt;
===Исправляем параметр в конфигурации сервиса===&lt;br /&gt;
&lt;br /&gt;
Исправляем значение параметра:&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i 's/ProtectHome=yes/ProtectHome=no/g' /lib/systemd/system/httpd2.service&lt;br /&gt;
&lt;br /&gt;
После этого перезагрузим демона systemd и сервис httpd2&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
 sudo systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
Перед редактированием конфигурации необходимо передать права на папку публикации самому веб-серверу. По умолчанию она может быть закрыта для него. Если этого не сделать, веб-сервер не сможет прочитать файл настроек default.vrd и вернет ошибку доступа при обращении к базе через браузер.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R apache2: /var/www/odata_base&lt;br /&gt;
chmod -R 755 /var/www/odata_base&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Домашние каталоги пользователей (например, /home/user/) по умолчанию полностью изолированы от системных служб. Чтобы веб-сервер apache2 смог добраться до папки с базой данных, ему нужно дать разрешение на «транзитный проход» сквозь вышестоящие директории. Флаг +x для папок как раз открывает эту возможность, не нарушая при этом приватность остальных личных файлов пользователя.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chmod a+x /home/user/&lt;br /&gt;
sudo chmod a+x /home/user/bases/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перед конфигурацией OData необходимо также предоставить веб-серверу права на чтение и запись внутри папки с самой базой. Чтобы не нарушать логику прав Linux и оставить пользователя владельцем файлов, мы добавляем apache2 в его группу и выставляем права 775 совместно с флагом SGID. Это позволит платформе беспрепятственно создавать файлы блокировок (.1CL), а новые файлы будут автоматически наследоваться группой.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chmod -R 2775 /home/user/bases/base1/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Перезапускаем веб-сервер===&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
===Проверяем публикацию===&lt;br /&gt;
Идём браузером по адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако данная веб-страница возвращает внутреннюю ошибку платформы 1С. По всей видимости, в текущем режиме совместимости конфигурации графический модуль для отображения данного стандартного окна не генерируется веб-сервером (отсутствуют необходимые JS-скрипты для рендеринга интерфейса).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&amp;quot;#exception&amp;quot;:&amp;quot;{http://v8.1c.ru/8.2/virtual-resource-system}Exception&amp;quot;,&amp;quot;exception&amp;quot;:{&amp;quot;clsid&amp;quot;:&amp;quot;580392e6-ba49-4280-ac67-fcd6f2180121&amp;quot;,&amp;quot;reason&amp;quot;:404,&amp;quot;descr&amp;quot;:&amp;quot;HTTP: Not found\nError executing the query GET to resource /en/scripts/mod_bootstrap_bootstrap.js:&amp;quot;,&amp;quot;category&amp;quot;:&amp;quot;00000000000000000000000000&amp;quot;,&amp;quot;creationStack&amp;quot;:&amp;quot;mngsrvt:0x0000000000252DF5 mngsrvt:0x000000000024F8F4 vrsbaset:0x00000000006D7791 vrsbaset:0x00000000006540C5 vrsbaset:0x00000000006EBDE6 vrsbaset:0x00000000006D2A9C vrsbaset:0x00000000006EC4A9 vrsbaset:0x00000000006ED4A0 core85t:0x00000000008D4EBF core85t:0x00000000006B238C libc.so:0x0000000000000000 libc.so:0x0000000000000000 &amp;quot;}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ещё один привет разработчикам платформы 1С, по всей видимости, совсем не ориентирующимся на ОС на базе GNU/Linux, раз в учебной версии под GNU/Linux с веб-интерфейсом что-то не так).&lt;br /&gt;
&lt;br /&gt;
НО!&lt;br /&gt;
&lt;br /&gt;
Это не помешает нам работать с OData REST!&lt;br /&gt;
&lt;br /&gt;
===Включение поддержки OData===&lt;br /&gt;
&lt;br /&gt;
Любым текстовым редактором открываем конфигурационный файл публикации:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /var/www/odata_base/default.vrd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Внутри тега &amp;lt;standardOdata&amp;gt; меняем значение параметра enable с false на true:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итоговый вид файла default.vrd:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;point xmlns=&amp;quot;http://v8.1c.ru/8.2/virtual-resource-system&amp;quot;&lt;br /&gt;
                xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
                xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
                base=&amp;quot;/odata_base&amp;quot;&lt;br /&gt;
                ib=&amp;quot;File=/home/user/bases/base1;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ws pointEnableCommon=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        reuseSessions=&amp;quot;autouse&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;20&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;10&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;analytics enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;1200&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;500&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/point&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В блоке&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        reuseSessions=&amp;quot;autouse&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;20&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;10&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
измените значения параметров на&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
reuseSessions=&amp;quot;dontuse&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;0&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;0&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это решит проблему блокировки REST-сервиса на учебной версии 1С. При стандартных настройках веб-сервер удерживает соединения в пуле. Из-за этого даже при малом таймауте (sessionMaxAge) несколько идущих подряд запросов порождают новые параллельные сессии, что запрещено ограничениями учебной платформы (доступен только 1 сеанс). Обнуление пула гарантирует, что сессия будет закрываться сразу после выдачи данных.&lt;br /&gt;
&lt;br /&gt;
После изменения конфигурации перезапускаем службу веб-сервера для применения настроек:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart httpd2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки доступности интерфейса OData отправляем GET-запрос по адресу:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/odata/standard.odata?$format=json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример успешного ответа (корневой контейнер для пустой информационной базы):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;service xml:base=&amp;quot;http://localhost/odata_base/odata/standard.odata&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;workspace&amp;gt;&lt;br /&gt;
&amp;lt;atom:title&amp;gt;Default&amp;lt;/atom:title&amp;gt;&lt;br /&gt;
&amp;lt;/workspace&amp;gt;&lt;br /&gt;
&amp;lt;/service&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Внесение объектов в OData===&lt;br /&gt;
====Шаг 1. Создание внешней обработки====&lt;br /&gt;
Запустите Конфигуратор 1С, выберите в главном меню '''Файл''' -&amp;gt; '''Новый...''' и в открывшемся списке выберите '''Внешняя обработка'''.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-1.png|thumb|center|900px|Создание новой внешней обработки в Конфигураторе]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-2.png|thumb|center|900px|Выбор типа создаваемого документа]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 2. Настройка свойств и создание формы====&lt;br /&gt;
В открывшемся окне свойств новой обработки выполните следующие действия:&lt;br /&gt;
# '''Имя''': Задайте понятное имя (например, `НастройкаOData`).&lt;br /&gt;
# '''Создание формы''': Перейдите на вкладку '''Формы''' и нажмите на кнопку «Добавить», чтобы создать основную форму обработки. На этой форме мы разместим кнопку и пропишем логику внесения объектов в OData.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-3.png|thumb|center|900px|Настройка имени обработки и инициализация создания формы]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 3. Добавление команды и программного кода====&lt;br /&gt;
В редакторе формы перейдите на вкладку '''Команды''' (в правой части экрана) и добавьте новую команду формы, задав ей имя (например, `ВыполнитьНастройку`). &lt;br /&gt;
&lt;br /&gt;
Перетащите созданную команду мышкой в левую верхнюю часть окна — в структуру элементов формы, чтобы она превратилась в физическую кнопку. &lt;br /&gt;
&lt;br /&gt;
После этого нажмите правой кнопкой мыши по кнопке в левой части, выберите пункт '''Действие команды''' и в выпадающем меню выберите вариант: '''Создать на клиенте и процедуру на сервере без контекста'''.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-4.png|thumb|center|900px|Проектирование интерфейса формы и привязка клиент-серверного действия к кнопке]]&lt;br /&gt;
&lt;br /&gt;
* '''1''' — Кнопка добавления на вкладке «Команды» в правой панели, с помощью которой создается новая команда формы.&lt;br /&gt;
* '''2''' — Элемент формы в левой панели (структура элементов), получившийся в результате перетаскивания команды мышкой из правой части.&lt;br /&gt;
* '''3''' — Пункт контекстного меню '''Действие команды''', открывающийся по правому клику мыши на перенесенном элементе для генерации шаблонов процедур.&lt;br /&gt;
&lt;br /&gt;
В модуле формы замените сгенерированные шаблоны процедур следующим кодом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;НаКлиенте&lt;br /&gt;
Процедура ВыполнитьНастройку(Команда)&lt;br /&gt;
    ВыполнитьНастройкуНаСервере();&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
&lt;br /&gt;
&amp;amp;НаСервереБезКонтекста&lt;br /&gt;
Процедура ВыполнитьНастройкуНаСервере()&lt;br /&gt;
    // 1. Создаем массив для объектов, которые пойдут в веб-сервис&lt;br /&gt;
    МассивОбъектов = Новый Массив;&lt;br /&gt;
    &lt;br /&gt;
    // 2. Добавляем в массив необходимый справочник (например, Сотрудники)&lt;br /&gt;
    МассивОбъектов.Добавить(Метаданные.Справочники.Сотрудники);&lt;br /&gt;
    &lt;br /&gt;
    // 3. Передаем этот массив платформе для регистрации в OData&lt;br /&gt;
    УстановитьСоставСтандартногоИнтерфейсаOData(МассивОбъектов);&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Шаг 4. Сохранение обработки====&lt;br /&gt;
Закройте окна редактора формы и программного модуля. Вернувшись в основное окно создания внешней обработки, нажмите кнопку '''Закрыть'''. Платформа автоматически предложит сохранить изменения — выберите удобный каталог на диске и сохраните файл обработки (с расширением `.epf`).&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-5.png|thumb|center|900px|Процесс сохранения внешней обработки на диск]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 5. Запуск обработки в режиме предприятия====&lt;br /&gt;
Запустите 1С:Предприятие. В главном меню выберите '''Файл''' -&amp;gt; '''Открыть...''', найдите сохраненную ранее внешнюю обработку и откройте её. Если система безопасности выдаст предупреждение о потенциальной опасности подключаемого модуля, согласитесь с рисками и подтвердите открытие.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-6.png|thumb|center|900px|Открытие файла внешней обработки через пользовательский интерфейс 1С]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 6. Инициализация OData====&lt;br /&gt;
На экране появится созданная нами форма. Нажмите на ней кнопку '''Выполнить настройку'''. В этот момент отработает заложенная нами серверная логика, и состав стандартного интерфейса OData обновится. После этого обработку и само приложение 1С можно закрывать.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-7.png|thumb|center|900px|Финальное выполнение логики обработки по нажатию кнопки]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 7. Проверка доступности объектов в OData====&lt;br /&gt;
Чтобы убедиться, что внешняя обработка успешно зарегистрировала наши метаданные в веб-сервисе, откройте браузер и повторно отправьте GET-запрос по уже знакомому адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/odata/standard.odata&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если всё сделано правильно, в ответе от сервера (в формате JSON или XML, в зависимости от настроек) вместо пустого корневого контейнера вы увидите структуру метаданных, содержащую зарегистрированный нами справочник. &lt;br /&gt;
&lt;br /&gt;
Внутри тега `&amp;lt;workspace&amp;gt;` появится коллекция доступных сущностей (EntitySet), среди которых будет фигурировать URL для работы со справочником сотрудников: `Catalog_Сотрудники`.&lt;br /&gt;
&lt;br /&gt;
==Автоматизация резервного копирования информационных баз==&lt;br /&gt;
&lt;br /&gt;
Предполагается, что платформа &amp;quot;1С Предприятие&amp;quot; работает на GNU/Linux системе и скрипт резервного копирования выполняется от пользователя&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
, графическое окружение которого автоматически запускается после загрузки компьютера.&lt;br /&gt;
&lt;br /&gt;
Дело в том, что по каким-то причинам, разработчики платформы &amp;quot;1С Предприятие&amp;quot; не заложили в систему запуск резервного копирования в headless-режиме, поэтому платформе необходим дисплей X-сервера.&lt;br /&gt;
&lt;br /&gt;
Также предполагается, что файл с паролем от пользователя платформы &amp;quot;1С Предприятие&amp;quot;, которому разрешено выполнять резервное копирование, хранится в файле&lt;br /&gt;
&lt;br /&gt;
 /home/administrator/.1c-cluster-infobases-backup.pass&lt;br /&gt;
&lt;br /&gt;
и рекомендуемые права на этот файл&lt;br /&gt;
&lt;br /&gt;
 0400&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Подготовка каталога для скриптов===&lt;br /&gt;
&lt;br /&gt;
 mkdir /opt/1c_backup_scripts&lt;br /&gt;
&lt;br /&gt;
===Базовый скрипт===&lt;br /&gt;
&lt;br /&gt;
При необходимости, в тексте скрипта, отредактируйте строчку&lt;br /&gt;
&lt;br /&gt;
 bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
, указав путь до конкретной версии платформы &amp;quot;1С Предприятие&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже предоставлен текст, который можно выделить, скопировать в текстовый редактор, при необходимости поправить, затем весь этот текст можно бросить в консоль для создания файла посредством heredoc-синтаксиса:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup_infobase_1c_generic.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export LANG=ru_RU.UTF-8&lt;br /&gt;
&lt;br /&gt;
NON_ROOT_USER=&amp;quot;administrator&amp;quot;&lt;br /&gt;
DISPLAY=&amp;quot;:0&amp;quot;&lt;br /&gt;
STORAGE=&amp;quot;${1}&amp;quot;&lt;br /&gt;
SRV=&amp;quot;${2}&amp;quot;&lt;br /&gt;
REF=&amp;quot;${3}&amp;quot;&lt;br /&gt;
LOGIN=&amp;quot;${4}&amp;quot;&lt;br /&gt;
PASSWORD_FILE=&amp;quot;${5}&amp;quot;&lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;${6}&amp;quot;&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;${7}&amp;quot;&lt;br /&gt;
TIMEOUT_COUNTER=0&lt;br /&gt;
LOCK_FILE_PATH=&amp;quot;/home/usr1cv8/.1cv8/1C/1cv8/reg_1541/snccntx8e79a393-c2af-4fd7-b25a-af6b5ed19bfa/snccntx.dat&amp;quot;&lt;br /&gt;
#-----------------------------&lt;br /&gt;
export DISPLAY=&amp;quot;${DISPLAY}&amp;quot;&lt;br /&gt;
bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
PASSWORD=`cat ${PASSWORD_FILE} | head -1`&lt;br /&gt;
infobase_suffix=&amp;quot;$(date +%Y-%m-%d-%H-%M-%S).dt&amp;quot;&lt;br /&gt;
TMP_STORAGE=&amp;quot;/opt/1c_backup_scripts/tmp_storage&amp;quot;&lt;br /&gt;
ib_tmp_filepath=&amp;quot;${TMP_STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_tmp_log=&amp;quot;${ib_tmp_filepath}.log&amp;quot;&lt;br /&gt;
ib_filepath=&amp;quot;${STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_log=&amp;quot;${ib_filepath}.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function rotate_backups(){&lt;br /&gt;
filenames_cmd=&amp;quot;${STORAGE}/${REF}*&amp;quot;&lt;br /&gt;
current_unixtime=`date +%s --date=&amp;quot;$(date +%Y-%m-%d) 00:00:00&amp;quot;`&lt;br /&gt;
test_unixtime=$(($current_unixtime-$KEEP_BACKUPS_FOR_LAST_DAYS*60*60*24))&lt;br /&gt;
&lt;br /&gt;
for f in $(/bin/ls $filenames_cmd); do&lt;br /&gt;
#echo &amp;quot;f=$f&amp;quot;&lt;br /&gt;
datetime_from_file=`echo ${f} | awk -F '__' {'print $2'} | awk -F '.' {'print $1'}`&lt;br /&gt;
#echo &amp;quot;datetime_from_file=${datetime_from_file}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#2023-12-24-22-01-02&lt;br /&gt;
Y=`echo ${datetime_from_file} | awk -F '-' {'print $1'}`&lt;br /&gt;
M=`echo ${datetime_from_file} | awk -F '-' {'print $2'}`&lt;br /&gt;
D=`echo ${datetime_from_file} | awk -F '-' {'print $3'}`&lt;br /&gt;
h=`echo ${datetime_from_file} | awk -F '-' {'print $4'}`&lt;br /&gt;
m=`echo ${datetime_from_file} | awk -F '-' {'print $5'}`&lt;br /&gt;
s=`echo ${datetime_from_file} | awk -F '-' {'print $6'}`&lt;br /&gt;
&lt;br /&gt;
unixtime_from_file=`date +%s --date=&amp;quot;${Y}-${M}-${D} ${h}:${m}:${s}&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
if [[ $unixtime_from_file -lt $test_unixtime ]]; then&lt;br /&gt;
  echo &amp;quot;delete file: ${f}&amp;quot;&lt;br /&gt;
  /bin/rm ${f}&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;keep file: ${f}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function wait(){&lt;br /&gt;
&lt;br /&gt;
  if [[ $TIMEOUT_COUNTER -ge $BACKUP_TIMEOUT_SEC ]]; then&lt;br /&gt;
    kill -9 ${1}&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  if [ ! -d /proc/${1}/ ]; then&lt;br /&gt;
    nice_text=&amp;quot;Выгрузка информационной базы успешно завершена&amp;quot;&lt;br /&gt;
    res_text=$(grep -o -i &amp;quot;${nice_text}&amp;quot; ${ib_tmp_log})&lt;br /&gt;
&lt;br /&gt;
    # start apache2&lt;br /&gt;
    sudo systemctl start httpd2&lt;br /&gt;
&lt;br /&gt;
    if [ &amp;quot;${res_text}&amp;quot; = &amp;quot;${nice_text}&amp;quot; ]; then&lt;br /&gt;
      /bin/cp ${ib_tmp_filepath} ${ib_filepath} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_filepath}&lt;br /&gt;
      /bin/cp ${ib_tmp_log} ${ib_log} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_log}&lt;br /&gt;
      #echo &amp;quot;TEST: ${ib_filepath} AND ${ib_log}&amp;quot;&lt;br /&gt;
      rotate_backups&lt;br /&gt;
      exit 0&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    exit 1&lt;br /&gt;
  fi&lt;br /&gt;
  #echo &amp;quot;pid alive: ${1}&amp;quot;&lt;br /&gt;
  sleep 1&lt;br /&gt;
  TIMEOUT_COUNTER=$(($TIMEOUT_COUNTER+1))&lt;br /&gt;
  wait ${1}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# prepare tmp storage&lt;br /&gt;
[ ! -d ${TMP_STORAGE} ] &amp;amp;&amp;amp; sudo mkdir &amp;quot;${TMP_STORAGE}&amp;quot; &amp;amp;&amp;amp; sudo chown administrator: &amp;quot;${TMP_STORAGE}&amp;quot; -R&lt;br /&gt;
&lt;br /&gt;
# stop apache2&lt;br /&gt;
sudo systemctl stop httpd2&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
# reset srv1cv8 sessions&lt;br /&gt;
sudo systemctl stop srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
sudo /bin/rm -f &amp;quot;${LOCK_FILE_PATH}&amp;quot;&lt;br /&gt;
sudo systemctl start srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
DISPLAY=:0 XAUTHORITY=/home/administrator/.Xauthority ${bin1c} CONFIG /N &amp;quot;${LOGIN}&amp;quot; /P &amp;quot;${PASSWORD}&amp;quot; /S &amp;quot;${SRV}/${REF}&amp;quot; /DumpIB &amp;quot;${ib_tmp_filepath}&amp;quot; /OUT &amp;quot;${ib_tmp_log}&amp;quot; &amp;amp;&lt;br /&gt;
main_process_pid=$!&lt;br /&gt;
&lt;br /&gt;
wait ${main_process_pid}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup_infobase_1c_generic.sh&lt;br /&gt;
&lt;br /&gt;
===Скрипт для резервирования конкретной базы данных===&lt;br /&gt;
Данный скрипт представляет из себя обёртку над выше приведённым скриптом, с заданием конкретных параметров резервирования&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup__my_super_infobase.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
### PARAMETERS ###&lt;br /&gt;
STORAGE=&amp;quot;/mnt/storage/my-1c-host-backups&amp;quot; # каталог для сохранения резервных копий&lt;br /&gt;
SRV=&amp;quot;my-1c-host&amp;quot;                          # хост, на котором работает платформа &amp;quot;1С: Предприятие&amp;quot;&lt;br /&gt;
REF=&amp;quot;my_super_infobase&amp;quot;                   # имя базы данных, которую резервируем&lt;br /&gt;
LOGIN=&amp;quot;backupuser&amp;quot;                        # 1с-пользователь, которому разрешено резервировать базу данных&lt;br /&gt;
PASSWORD_FILE=&amp;quot;/home/administrator/.1c-cluster-infobases-backup.pass&amp;quot; # в этом файле должен находиться только пароль от 1с-пользоателя &lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;2&amp;quot;            # сохранить резервные копии только за эти несколько последных дней (в текущем примере - за 2 последних дня)&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;300&amp;quot;                  # таймаут, в течение которого разрешено работать процессу резервирования (процессу платформы &amp;quot;1С: Предприятие&amp;quot;. Если за этот таймаут процесс не успел сделать резервную копию, то он снимается с выполнения)&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### BOT PARAMETERS&lt;br /&gt;
TELEGRAM_BOT_TOKEN=&amp;quot;&amp;quot;             # сюда нужно вписать токен телеграм-бота, который будет отсылать уведомления&lt;br /&gt;
TELEGRAM_DESTINATION_GROUP_ID=&amp;quot;&amp;quot;  # сюда нужно вписать идентификатор телеграм-пользователя или телеграм-группы (не забывайте про минус в начале, если это идентификатор группы), в которого (или в которую, если это группа) бот будет писать сообщения&lt;br /&gt;
&lt;br /&gt;
function send_message_telegram(){&lt;br /&gt;
#exit 0  # раскомментируйте эту строчку, если отсылка сообщений телеграм-ботом не нужна (следовательно, и параметры дя бота при этом можно не задавать)&lt;br /&gt;
message=${1}&lt;br /&gt;
curl -s -X POST \&lt;br /&gt;
     -H 'Content-Type: application/json' \&lt;br /&gt;
     -d &amp;quot;{\&amp;quot;chat_id\&amp;quot;: \&amp;quot;${TELEGRAM_DESTINATION_GROUP_ID}\&amp;quot;, \&amp;quot;text\&amp;quot;: \&amp;quot;${message}\&amp;quot;, \&amp;quot;disable_notification\&amp;quot;: true}&amp;quot; \&lt;br /&gt;
     https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage &amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### START ###&lt;br /&gt;
BASE=`dirname ${0}`&lt;br /&gt;
${BASE}/backup_infobase_1c_generic.sh &amp;quot;${STORAGE}&amp;quot; &amp;quot;${SRV}&amp;quot; &amp;quot;${REF}&amp;quot; &amp;quot;${LOGIN}&amp;quot; &amp;quot;${PASSWORD_FILE}&amp;quot; &amp;quot;${KEEP_BACKUPS_FOR_LAST_DAYS}&amp;quot; &amp;quot;${BACKUP_TIMEOUT_SEC}&amp;quot;&lt;br /&gt;
res=$?&lt;br /&gt;
&lt;br /&gt;
if [ ${res} -eq 0 ]; then&lt;br /&gt;
send_message_telegram &amp;quot;[Успешно]\nРезервное копирование информационной базы '${REF}' выполнено успешно&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
send_message_telegram &amp;quot;[Ошибка]\nРезервное копирование информационной базы '${REF}' не выполнено&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&lt;br /&gt;
===Ставим задачу для планировщика cron===&lt;br /&gt;
&lt;br /&gt;
Под пользователем&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
в терминале открываем временный файл для настройки crontab&lt;br /&gt;
&lt;br /&gt;
 EDITOR=nano crontab -e&lt;br /&gt;
&lt;br /&gt;
в результате редактором&lt;br /&gt;
&lt;br /&gt;
 nano&lt;br /&gt;
&lt;br /&gt;
будет открыт временный файл для установки параметров планировщика для текущего пользователя. Отредактировав и сохранив (Ctrl+O - Enter) изменения в этом файле и закрыв редактор (Ctrl+X) будет сконфигурирован планировщик для текущего пользователя.&lt;br /&gt;
&lt;br /&gt;
Проверить корректность заданных параметров планировщика можно выполнением команды&lt;br /&gt;
&lt;br /&gt;
 crontab -l&lt;br /&gt;
&lt;br /&gt;
В случае, если планировщик был сконфигурирован на запуск скрипта резервного копирования каждые сутки с 23:01, вывод команды проверки должен быть примерно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#minute (0-59),&lt;br /&gt;
#|	hour (0-23),&lt;br /&gt;
#|	|	day of the month (1-31),&lt;br /&gt;
#|	|	|	month of the year (1-12),&lt;br /&gt;
#|	|	|	|	day of the week (0-6 with 0=Sunday).&lt;br /&gt;
#|	|	|	|	|	commands&lt;br /&gt;
1       23	*	*	*	/opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11394</id>
		<title>1c</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11394"/>
		<updated>2026-06-13T09:19:56Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: /* Шаг 3. Добавление команды и программного кода */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=В GNU/Linux=&lt;br /&gt;
&lt;br /&gt;
==Установка учебной платформы 8.5.x на ОС Альт Стартеркит p11 GNOME==&lt;br /&gt;
&lt;br /&gt;
===Обновить ОС и ядро===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get update -y &amp;amp;&amp;amp; apt-get dist-upgrade -y &amp;amp;&amp;amp; update-kernel -y&lt;br /&gt;
&lt;br /&gt;
===Поставить пакеты===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get install -f alt-tour evince firefox libwebkit2gtk 1c-preinstall-full libglui&lt;br /&gt;
&lt;br /&gt;
===Включить sudo su===&lt;br /&gt;
&lt;br /&gt;
Раскоментировать в файле:&lt;br /&gt;
&lt;br /&gt;
 /etc/sudoers&lt;br /&gt;
&lt;br /&gt;
строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
или строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) NOPASSWD: ALL&lt;br /&gt;
&lt;br /&gt;
(если необходимо выполнять sudo su без пароля)&lt;br /&gt;
&lt;br /&gt;
===Установить платформу===&lt;br /&gt;
&lt;br /&gt;
Предполагается, что есть файл установки платформы:&lt;br /&gt;
&lt;br /&gt;
 setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Тогда установка осуществляетс следующим образом:&lt;br /&gt;
&lt;br /&gt;
 chmod +x setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
 sudo ./setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Далее следуем инструкциям установщика. В установщике необходимо выбрать пункты &amp;quot;Установить ярлыки&amp;quot; и &amp;quot;Зависимости&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Установщик сам переключится в режим текстового интерфейса, если не найдёт дисплей (например, при установке по ssh). А вообще он имеет графический интерфейс...&lt;br /&gt;
&lt;br /&gt;
===Починить запуск платформы (актуально для ОС Альт веток p10 и p11 как минимум)===&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Получилось? Если да, то странно... Должна быть такая ошибка:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libicuuc.so.74)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjxl.so.0.11)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_12.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_13.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
&lt;br /&gt;
Не такая ошибка? Если да, то вы точно все пункты до этого выполнили (точно пакеты все установлены, которые выше в команде установки пакетовв перечислены)?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если ошибка такая, то чиним:&lt;br /&gt;
&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить ещё раз:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Всё должно работать. Теперь можно запускать платформу посредством ярлыков (кнопок меню приложений)&lt;br /&gt;
&lt;br /&gt;
По прежнему не запускается? Если да, то спешим на встречу новым приключениям!&lt;br /&gt;
&lt;br /&gt;
===Переопределить настройки по умолчанию для ОС Альт===&lt;br /&gt;
&lt;br /&gt;
====Каталог для файловых баз данных платформы 1С и sgid-bit====&lt;br /&gt;
&lt;br /&gt;
Поскольку полный путь до каталога с файловой базой данных будет фигурировать в конфигурационных файлах веб-сервера, его рекомендуется сделать отличным от пути по умолчанию, который предлагает платформа 1С (потому что в пути по умолчанию могут быть пробелы и кириллица).&lt;br /&gt;
&lt;br /&gt;
Например, так:&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/bases&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При публикации базы данных через веб-сервер необходимо чтобы у процесса веб-сервера, запущенного от пользователя&lt;br /&gt;
&lt;br /&gt;
 apache2&lt;br /&gt;
&lt;br /&gt;
был доступ на чтение и запись в каталог с базой данных конфигурации 1С.&lt;br /&gt;
&lt;br /&gt;
Один из вариантов это сделать следующий:&lt;br /&gt;
&lt;br /&gt;
1. Разрешаем членам группы-владельца каталога чтение и запись&lt;br /&gt;
&lt;br /&gt;
 sudo chmod g+rwx /home/user/bases -R&lt;br /&gt;
&lt;br /&gt;
2. Устанавливаем sgid бит на каталог&lt;br /&gt;
&lt;br /&gt;
 sudo chmod g+s /home/user/bases -R&lt;br /&gt;
&lt;br /&gt;
3. Добавляем пользователя apache2 в группу-владельца каталога&lt;br /&gt;
&lt;br /&gt;
 sudo usermod -aG user apache2&lt;br /&gt;
&lt;br /&gt;
==Публикация REST/Odata на веб-сервере==&lt;br /&gt;
&lt;br /&gt;
Предполагается что до этого были выполнены все действия в предыдущем разделе...&lt;br /&gt;
&lt;br /&gt;
===Устанавливаем и включаем веб-сервер apache2===&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install -y apache2&lt;br /&gt;
 sudo systemctl enable --now httpd2&lt;br /&gt;
&lt;br /&gt;
===Создаём симлинк для httpd2===&lt;br /&gt;
&lt;br /&gt;
Для скриптов платформы 1С это важно...&lt;br /&gt;
&lt;br /&gt;
 sudo ln -s /sbin/httpd2 /sbin/httpd&lt;br /&gt;
&lt;br /&gt;
===Публикуем командой===&lt;br /&gt;
&lt;br /&gt;
Сначала создаём файл (оно само не может):&lt;br /&gt;
&lt;br /&gt;
 sudo touch /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
Потом публикуем:&lt;br /&gt;
&lt;br /&gt;
 sudo HOME=/home/user /opt/1cv8t/x86_64/8.5.1.1150/webinstt -apache24 -wsdir odata_base -dir /var/www/odata_base -connstr &amp;quot;File=/home/user/bases/base1;&amp;quot; -confPath /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
В ответ должно прийти что-то типа этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация выполнена&lt;br /&gt;
&lt;br /&gt;
или этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация обновлена&lt;br /&gt;
&lt;br /&gt;
Примерное содержимое файла в контексте конфигурационных файлов веб-сервера apache2:&lt;br /&gt;
&lt;br /&gt;
 cat /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LoadModule _1cws_module &amp;quot;/opt/1cv8t/x86_64/8.5.1.1150/wsap24t.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 1c publication&lt;br /&gt;
Alias &amp;quot;/odata_base&amp;quot; &amp;quot;/var/www/odata_base/&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/odata_base/&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride All&lt;br /&gt;
    Options None&lt;br /&gt;
    Require all granted&lt;br /&gt;
    SetHandler 1c-application&lt;br /&gt;
    ManagedApplicationDescriptor &amp;quot;/var/www/odata_base/default.vrd&amp;quot;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Исправляем группу-владельца на файл ===&lt;br /&gt;
&lt;br /&gt;
По каким-то причинам после выполнения публикации утилитой webinstt файл:&lt;br /&gt;
&lt;br /&gt;
 /var/www/odata_base/default.vrd&lt;br /&gt;
&lt;br /&gt;
имеет группу-владельца:&lt;br /&gt;
&lt;br /&gt;
 apache&lt;br /&gt;
&lt;br /&gt;
(привет разработчикам платформы 1С, ориентирующимся, поди, на Ubuntu, а не на ОС из реестра минцифры)...&lt;br /&gt;
&lt;br /&gt;
Исправляем:&lt;br /&gt;
&lt;br /&gt;
 sudo chgrp apache2 /var/www/odata_base/default.vrd&lt;br /&gt;
&lt;br /&gt;
===Исправляем параметр в конфигурации сервиса===&lt;br /&gt;
&lt;br /&gt;
Исправляем значение параметра:&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i 's/ProtectHome=yes/ProtectHome=no/g' /lib/systemd/system/httpd2.service&lt;br /&gt;
&lt;br /&gt;
После этого перезагрузим демона systemd и сервис httpd2&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
 sudo systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
Перед редактированием конфигурации необходимо передать права на папку публикации самому веб-серверу. По умолчанию она может быть закрыта для него. Если этого не сделать, веб-сервер не сможет прочитать файл настроек default.vrd и вернет ошибку доступа при обращении к базе через браузер.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R apache2: /var/www/odata_base&lt;br /&gt;
chmod -R 755 /var/www/odata_base&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Домашние каталоги пользователей (например, /home/user/) по умолчанию полностью изолированы от системных служб. Чтобы веб-сервер apache2 смог добраться до папки с базой данных, ему нужно дать разрешение на «транзитный проход» сквозь вышестоящие директории. Флаг +x для папок как раз открывает эту возможность, не нарушая при этом приватность остальных личных файлов пользователя.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chmod a+x /home/user/&lt;br /&gt;
sudo chmod a+x /home/user/bases/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перед конфигурацией OData необходимо также предоставить веб-серверу права на чтение и запись внутри папки с самой базой. Чтобы не нарушать логику прав Linux и оставить пользователя владельцем файлов, мы добавляем apache2 в его группу и выставляем права 775 совместно с флагом SGID. Это позволит платформе беспрепятственно создавать файлы блокировок (.1CL), а новые файлы будут автоматически наследоваться группой.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chmod -R 2775 /home/user/bases/base1/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Перезапускаем веб-сервер===&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
===Проверяем публикацию===&lt;br /&gt;
Идём браузером по адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако данная веб-страница возвращает внутреннюю ошибку платформы 1С. По всей видимости, в текущем режиме совместимости конфигурации графический модуль для отображения данного стандартного окна не генерируется веб-сервером (отсутствуют необходимые JS-скрипты для рендеринга интерфейса).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&amp;quot;#exception&amp;quot;:&amp;quot;{http://v8.1c.ru/8.2/virtual-resource-system}Exception&amp;quot;,&amp;quot;exception&amp;quot;:{&amp;quot;clsid&amp;quot;:&amp;quot;580392e6-ba49-4280-ac67-fcd6f2180121&amp;quot;,&amp;quot;reason&amp;quot;:404,&amp;quot;descr&amp;quot;:&amp;quot;HTTP: Not found\nError executing the query GET to resource /en/scripts/mod_bootstrap_bootstrap.js:&amp;quot;,&amp;quot;category&amp;quot;:&amp;quot;00000000000000000000000000&amp;quot;,&amp;quot;creationStack&amp;quot;:&amp;quot;mngsrvt:0x0000000000252DF5 mngsrvt:0x000000000024F8F4 vrsbaset:0x00000000006D7791 vrsbaset:0x00000000006540C5 vrsbaset:0x00000000006EBDE6 vrsbaset:0x00000000006D2A9C vrsbaset:0x00000000006EC4A9 vrsbaset:0x00000000006ED4A0 core85t:0x00000000008D4EBF core85t:0x00000000006B238C libc.so:0x0000000000000000 libc.so:0x0000000000000000 &amp;quot;}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ещё один привет разработчикам платформы 1С, по всей видимости, совсем не ориентирующимся на ОС на базе GNU/Linux, раз в учебной версии под GNU/Linux с веб-интерфейсом что-то не так).&lt;br /&gt;
&lt;br /&gt;
НО!&lt;br /&gt;
&lt;br /&gt;
Это не помешает нам работать с OData REST!&lt;br /&gt;
&lt;br /&gt;
===Включение поддержки OData===&lt;br /&gt;
&lt;br /&gt;
Любым текстовым редактором открываем конфигурационный файл публикации:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /var/www/odata_base/default.vrd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Внутри тега &amp;lt;standardOdata&amp;gt; меняем значение параметра enable с false на true:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итоговый вид файла default.vrd:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;point xmlns=&amp;quot;http://v8.1c.ru/8.2/virtual-resource-system&amp;quot;&lt;br /&gt;
                xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
                xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
                base=&amp;quot;/odata_base&amp;quot;&lt;br /&gt;
                ib=&amp;quot;File=/home/user/bases/base1;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ws pointEnableCommon=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        reuseSessions=&amp;quot;autouse&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;20&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;10&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;analytics enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;1200&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;500&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/point&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В блоке&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        reuseSessions=&amp;quot;autouse&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;20&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;10&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
увеличьте значение параметра&lt;br /&gt;
&lt;br /&gt;
 sessionMaxAge&lt;br /&gt;
&lt;br /&gt;
до&lt;br /&gt;
&lt;br /&gt;
 1200&lt;br /&gt;
&lt;br /&gt;
чтобы доступ к REST на учебной версии платформы не блокировался (при нескольких запросах с малым значением параметра sessionMaxAge платформа будет создавать более одной сессии, а учебная версия предусматривает только одну сессию!).&lt;br /&gt;
&lt;br /&gt;
После изменения конфигурации перезапускаем службу веб-сервера для применения настроек:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart httpd2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки доступности интерфейса OData отправляем GET-запрос по адресу:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/odata/standard.odata?$format=json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример успешного ответа (корневой контейнер для пустой информационной базы):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;service xml:base=&amp;quot;http://localhost/odata_base/odata/standard.odata&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;workspace&amp;gt;&lt;br /&gt;
&amp;lt;atom:title&amp;gt;Default&amp;lt;/atom:title&amp;gt;&lt;br /&gt;
&amp;lt;/workspace&amp;gt;&lt;br /&gt;
&amp;lt;/service&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Внесение объектов в OData===&lt;br /&gt;
====Шаг 1. Создание внешней обработки====&lt;br /&gt;
Запустите Конфигуратор 1С, выберите в главном меню '''Файл''' -&amp;gt; '''Новый...''' и в открывшемся списке выберите '''Внешняя обработка'''.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-1.png|thumb|center|900px|Создание новой внешней обработки в Конфигураторе]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-2.png|thumb|center|900px|Выбор типа создаваемого документа]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 2. Настройка свойств и создание формы====&lt;br /&gt;
В открывшемся окне свойств новой обработки выполните следующие действия:&lt;br /&gt;
# '''Имя''': Задайте понятное имя (например, `НастройкаOData`).&lt;br /&gt;
# '''Создание формы''': Перейдите на вкладку '''Формы''' и нажмите на кнопку «Добавить», чтобы создать основную форму обработки. На этой форме мы разместим кнопку и пропишем логику внесения объектов в OData.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-3.png|thumb|center|900px|Настройка имени обработки и инициализация создания формы]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 3. Добавление команды и программного кода====&lt;br /&gt;
В редакторе формы перейдите на вкладку '''Команды''' (в правой части экрана) и добавьте новую команду формы, задав ей имя (например, `ВыполнитьНастройку`). &lt;br /&gt;
&lt;br /&gt;
Перетащите созданную команду мышкой в левую верхнюю часть окна — в структуру элементов формы, чтобы она превратилась в физическую кнопку. &lt;br /&gt;
&lt;br /&gt;
После этого нажмите правой кнопкой мыши по кнопке в левой части, выберите пункт '''Действие команды''' и в выпадающем меню выберите вариант: '''Создать на клиенте и процедуру на сервере без контекста'''.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-4.png|thumb|center|900px|Проектирование интерфейса формы и привязка клиент-серверного действия к кнопке]]&lt;br /&gt;
&lt;br /&gt;
* '''1''' — Кнопка добавления на вкладке «Команды» в правой панели, с помощью которой создается новая команда формы.&lt;br /&gt;
* '''2''' — Элемент формы в левой панели (структура элементов), получившийся в результате перетаскивания команды мышкой из правой части.&lt;br /&gt;
* '''3''' — Пункт контекстного меню '''Действие команды''', открывающийся по правому клику мыши на перенесенном элементе для генерации шаблонов процедур.&lt;br /&gt;
&lt;br /&gt;
В модуле формы замените сгенерированные шаблоны процедур следующим кодом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;НаКлиенте&lt;br /&gt;
Процедура ВыполнитьНастройку(Команда)&lt;br /&gt;
    ВыполнитьНастройкуНаСервере();&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
&lt;br /&gt;
&amp;amp;НаСервереБезКонтекста&lt;br /&gt;
Процедура ВыполнитьНастройкуНаСервере()&lt;br /&gt;
    // 1. Создаем массив для объектов, которые пойдут в веб-сервис&lt;br /&gt;
    МассивОбъектов = Новый Массив;&lt;br /&gt;
    &lt;br /&gt;
    // 2. Добавляем в массив необходимый справочник (например, Сотрудники)&lt;br /&gt;
    МассивОбъектов.Добавить(Метаданные.Справочники.Сотрудники);&lt;br /&gt;
    &lt;br /&gt;
    // 3. Передаем этот массив платформе для регистрации в OData&lt;br /&gt;
    УстановитьСоставСтандартногоИнтерфейсаOData(МассивОбъектов);&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Шаг 4. Сохранение обработки====&lt;br /&gt;
Закройте окна редактора формы и программного модуля. Вернувшись в основное окно создания внешней обработки, нажмите кнопку '''Закрыть'''. Платформа автоматически предложит сохранить изменения — выберите удобный каталог на диске и сохраните файл обработки (с расширением `.epf`).&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-5.png|thumb|center|900px|Процесс сохранения внешней обработки на диск]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 5. Запуск обработки в режиме предприятия====&lt;br /&gt;
Запустите 1С:Предприятие. В главном меню выберите '''Файл''' -&amp;gt; '''Открыть...''', найдите сохраненную ранее внешнюю обработку и откройте её. Если система безопасности выдаст предупреждение о потенциальной опасности подключаемого модуля, согласитесь с рисками и подтвердите открытие.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-6.png|thumb|center|900px|Открытие файла внешней обработки через пользовательский интерфейс 1С]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 6. Инициализация OData====&lt;br /&gt;
На экране появится созданная нами форма. Нажмите на ней кнопку '''Выполнить настройку'''. В этот момент отработает заложенная нами серверная логика, и состав стандартного интерфейса OData обновится. После этого обработку и само приложение 1С можно закрывать.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-7.png|thumb|center|900px|Финальное выполнение логики обработки по нажатию кнопки]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 7. Проверка доступности объектов в OData====&lt;br /&gt;
Чтобы убедиться, что внешняя обработка успешно зарегистрировала наши метаданные в веб-сервисе, откройте браузер и повторно отправьте GET-запрос по уже знакомому адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/odata/standard.odata&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если всё сделано правильно, в ответе от сервера (в формате JSON или XML, в зависимости от настроек) вместо пустого корневого контейнера вы увидите структуру метаданных, содержащую зарегистрированный нами справочник. &lt;br /&gt;
&lt;br /&gt;
Внутри тега `&amp;lt;workspace&amp;gt;` появится коллекция доступных сущностей (EntitySet), среди которых будет фигурировать URL для работы со справочником сотрудников: `Catalog_Сотрудники`.&lt;br /&gt;
&lt;br /&gt;
==Автоматизация резервного копирования информационных баз==&lt;br /&gt;
&lt;br /&gt;
Предполагается, что платформа &amp;quot;1С Предприятие&amp;quot; работает на GNU/Linux системе и скрипт резервного копирования выполняется от пользователя&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
, графическое окружение которого автоматически запускается после загрузки компьютера.&lt;br /&gt;
&lt;br /&gt;
Дело в том, что по каким-то причинам, разработчики платформы &amp;quot;1С Предприятие&amp;quot; не заложили в систему запуск резервного копирования в headless-режиме, поэтому платформе необходим дисплей X-сервера.&lt;br /&gt;
&lt;br /&gt;
Также предполагается, что файл с паролем от пользователя платформы &amp;quot;1С Предприятие&amp;quot;, которому разрешено выполнять резервное копирование, хранится в файле&lt;br /&gt;
&lt;br /&gt;
 /home/administrator/.1c-cluster-infobases-backup.pass&lt;br /&gt;
&lt;br /&gt;
и рекомендуемые права на этот файл&lt;br /&gt;
&lt;br /&gt;
 0400&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Подготовка каталога для скриптов===&lt;br /&gt;
&lt;br /&gt;
 mkdir /opt/1c_backup_scripts&lt;br /&gt;
&lt;br /&gt;
===Базовый скрипт===&lt;br /&gt;
&lt;br /&gt;
При необходимости, в тексте скрипта, отредактируйте строчку&lt;br /&gt;
&lt;br /&gt;
 bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
, указав путь до конкретной версии платформы &amp;quot;1С Предприятие&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже предоставлен текст, который можно выделить, скопировать в текстовый редактор, при необходимости поправить, затем весь этот текст можно бросить в консоль для создания файла посредством heredoc-синтаксиса:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup_infobase_1c_generic.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export LANG=ru_RU.UTF-8&lt;br /&gt;
&lt;br /&gt;
NON_ROOT_USER=&amp;quot;administrator&amp;quot;&lt;br /&gt;
DISPLAY=&amp;quot;:0&amp;quot;&lt;br /&gt;
STORAGE=&amp;quot;${1}&amp;quot;&lt;br /&gt;
SRV=&amp;quot;${2}&amp;quot;&lt;br /&gt;
REF=&amp;quot;${3}&amp;quot;&lt;br /&gt;
LOGIN=&amp;quot;${4}&amp;quot;&lt;br /&gt;
PASSWORD_FILE=&amp;quot;${5}&amp;quot;&lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;${6}&amp;quot;&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;${7}&amp;quot;&lt;br /&gt;
TIMEOUT_COUNTER=0&lt;br /&gt;
LOCK_FILE_PATH=&amp;quot;/home/usr1cv8/.1cv8/1C/1cv8/reg_1541/snccntx8e79a393-c2af-4fd7-b25a-af6b5ed19bfa/snccntx.dat&amp;quot;&lt;br /&gt;
#-----------------------------&lt;br /&gt;
export DISPLAY=&amp;quot;${DISPLAY}&amp;quot;&lt;br /&gt;
bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
PASSWORD=`cat ${PASSWORD_FILE} | head -1`&lt;br /&gt;
infobase_suffix=&amp;quot;$(date +%Y-%m-%d-%H-%M-%S).dt&amp;quot;&lt;br /&gt;
TMP_STORAGE=&amp;quot;/opt/1c_backup_scripts/tmp_storage&amp;quot;&lt;br /&gt;
ib_tmp_filepath=&amp;quot;${TMP_STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_tmp_log=&amp;quot;${ib_tmp_filepath}.log&amp;quot;&lt;br /&gt;
ib_filepath=&amp;quot;${STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_log=&amp;quot;${ib_filepath}.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function rotate_backups(){&lt;br /&gt;
filenames_cmd=&amp;quot;${STORAGE}/${REF}*&amp;quot;&lt;br /&gt;
current_unixtime=`date +%s --date=&amp;quot;$(date +%Y-%m-%d) 00:00:00&amp;quot;`&lt;br /&gt;
test_unixtime=$(($current_unixtime-$KEEP_BACKUPS_FOR_LAST_DAYS*60*60*24))&lt;br /&gt;
&lt;br /&gt;
for f in $(/bin/ls $filenames_cmd); do&lt;br /&gt;
#echo &amp;quot;f=$f&amp;quot;&lt;br /&gt;
datetime_from_file=`echo ${f} | awk -F '__' {'print $2'} | awk -F '.' {'print $1'}`&lt;br /&gt;
#echo &amp;quot;datetime_from_file=${datetime_from_file}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#2023-12-24-22-01-02&lt;br /&gt;
Y=`echo ${datetime_from_file} | awk -F '-' {'print $1'}`&lt;br /&gt;
M=`echo ${datetime_from_file} | awk -F '-' {'print $2'}`&lt;br /&gt;
D=`echo ${datetime_from_file} | awk -F '-' {'print $3'}`&lt;br /&gt;
h=`echo ${datetime_from_file} | awk -F '-' {'print $4'}`&lt;br /&gt;
m=`echo ${datetime_from_file} | awk -F '-' {'print $5'}`&lt;br /&gt;
s=`echo ${datetime_from_file} | awk -F '-' {'print $6'}`&lt;br /&gt;
&lt;br /&gt;
unixtime_from_file=`date +%s --date=&amp;quot;${Y}-${M}-${D} ${h}:${m}:${s}&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
if [[ $unixtime_from_file -lt $test_unixtime ]]; then&lt;br /&gt;
  echo &amp;quot;delete file: ${f}&amp;quot;&lt;br /&gt;
  /bin/rm ${f}&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;keep file: ${f}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function wait(){&lt;br /&gt;
&lt;br /&gt;
  if [[ $TIMEOUT_COUNTER -ge $BACKUP_TIMEOUT_SEC ]]; then&lt;br /&gt;
    kill -9 ${1}&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  if [ ! -d /proc/${1}/ ]; then&lt;br /&gt;
    nice_text=&amp;quot;Выгрузка информационной базы успешно завершена&amp;quot;&lt;br /&gt;
    res_text=$(grep -o -i &amp;quot;${nice_text}&amp;quot; ${ib_tmp_log})&lt;br /&gt;
&lt;br /&gt;
    # start apache2&lt;br /&gt;
    sudo systemctl start httpd2&lt;br /&gt;
&lt;br /&gt;
    if [ &amp;quot;${res_text}&amp;quot; = &amp;quot;${nice_text}&amp;quot; ]; then&lt;br /&gt;
      /bin/cp ${ib_tmp_filepath} ${ib_filepath} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_filepath}&lt;br /&gt;
      /bin/cp ${ib_tmp_log} ${ib_log} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_log}&lt;br /&gt;
      #echo &amp;quot;TEST: ${ib_filepath} AND ${ib_log}&amp;quot;&lt;br /&gt;
      rotate_backups&lt;br /&gt;
      exit 0&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    exit 1&lt;br /&gt;
  fi&lt;br /&gt;
  #echo &amp;quot;pid alive: ${1}&amp;quot;&lt;br /&gt;
  sleep 1&lt;br /&gt;
  TIMEOUT_COUNTER=$(($TIMEOUT_COUNTER+1))&lt;br /&gt;
  wait ${1}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# prepare tmp storage&lt;br /&gt;
[ ! -d ${TMP_STORAGE} ] &amp;amp;&amp;amp; sudo mkdir &amp;quot;${TMP_STORAGE}&amp;quot; &amp;amp;&amp;amp; sudo chown administrator: &amp;quot;${TMP_STORAGE}&amp;quot; -R&lt;br /&gt;
&lt;br /&gt;
# stop apache2&lt;br /&gt;
sudo systemctl stop httpd2&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
# reset srv1cv8 sessions&lt;br /&gt;
sudo systemctl stop srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
sudo /bin/rm -f &amp;quot;${LOCK_FILE_PATH}&amp;quot;&lt;br /&gt;
sudo systemctl start srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
DISPLAY=:0 XAUTHORITY=/home/administrator/.Xauthority ${bin1c} CONFIG /N &amp;quot;${LOGIN}&amp;quot; /P &amp;quot;${PASSWORD}&amp;quot; /S &amp;quot;${SRV}/${REF}&amp;quot; /DumpIB &amp;quot;${ib_tmp_filepath}&amp;quot; /OUT &amp;quot;${ib_tmp_log}&amp;quot; &amp;amp;&lt;br /&gt;
main_process_pid=$!&lt;br /&gt;
&lt;br /&gt;
wait ${main_process_pid}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup_infobase_1c_generic.sh&lt;br /&gt;
&lt;br /&gt;
===Скрипт для резервирования конкретной базы данных===&lt;br /&gt;
Данный скрипт представляет из себя обёртку над выше приведённым скриптом, с заданием конкретных параметров резервирования&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup__my_super_infobase.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
### PARAMETERS ###&lt;br /&gt;
STORAGE=&amp;quot;/mnt/storage/my-1c-host-backups&amp;quot; # каталог для сохранения резервных копий&lt;br /&gt;
SRV=&amp;quot;my-1c-host&amp;quot;                          # хост, на котором работает платформа &amp;quot;1С: Предприятие&amp;quot;&lt;br /&gt;
REF=&amp;quot;my_super_infobase&amp;quot;                   # имя базы данных, которую резервируем&lt;br /&gt;
LOGIN=&amp;quot;backupuser&amp;quot;                        # 1с-пользователь, которому разрешено резервировать базу данных&lt;br /&gt;
PASSWORD_FILE=&amp;quot;/home/administrator/.1c-cluster-infobases-backup.pass&amp;quot; # в этом файле должен находиться только пароль от 1с-пользоателя &lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;2&amp;quot;            # сохранить резервные копии только за эти несколько последных дней (в текущем примере - за 2 последних дня)&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;300&amp;quot;                  # таймаут, в течение которого разрешено работать процессу резервирования (процессу платформы &amp;quot;1С: Предприятие&amp;quot;. Если за этот таймаут процесс не успел сделать резервную копию, то он снимается с выполнения)&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### BOT PARAMETERS&lt;br /&gt;
TELEGRAM_BOT_TOKEN=&amp;quot;&amp;quot;             # сюда нужно вписать токен телеграм-бота, который будет отсылать уведомления&lt;br /&gt;
TELEGRAM_DESTINATION_GROUP_ID=&amp;quot;&amp;quot;  # сюда нужно вписать идентификатор телеграм-пользователя или телеграм-группы (не забывайте про минус в начале, если это идентификатор группы), в которого (или в которую, если это группа) бот будет писать сообщения&lt;br /&gt;
&lt;br /&gt;
function send_message_telegram(){&lt;br /&gt;
#exit 0  # раскомментируйте эту строчку, если отсылка сообщений телеграм-ботом не нужна (следовательно, и параметры дя бота при этом можно не задавать)&lt;br /&gt;
message=${1}&lt;br /&gt;
curl -s -X POST \&lt;br /&gt;
     -H 'Content-Type: application/json' \&lt;br /&gt;
     -d &amp;quot;{\&amp;quot;chat_id\&amp;quot;: \&amp;quot;${TELEGRAM_DESTINATION_GROUP_ID}\&amp;quot;, \&amp;quot;text\&amp;quot;: \&amp;quot;${message}\&amp;quot;, \&amp;quot;disable_notification\&amp;quot;: true}&amp;quot; \&lt;br /&gt;
     https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage &amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### START ###&lt;br /&gt;
BASE=`dirname ${0}`&lt;br /&gt;
${BASE}/backup_infobase_1c_generic.sh &amp;quot;${STORAGE}&amp;quot; &amp;quot;${SRV}&amp;quot; &amp;quot;${REF}&amp;quot; &amp;quot;${LOGIN}&amp;quot; &amp;quot;${PASSWORD_FILE}&amp;quot; &amp;quot;${KEEP_BACKUPS_FOR_LAST_DAYS}&amp;quot; &amp;quot;${BACKUP_TIMEOUT_SEC}&amp;quot;&lt;br /&gt;
res=$?&lt;br /&gt;
&lt;br /&gt;
if [ ${res} -eq 0 ]; then&lt;br /&gt;
send_message_telegram &amp;quot;[Успешно]\nРезервное копирование информационной базы '${REF}' выполнено успешно&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
send_message_telegram &amp;quot;[Ошибка]\nРезервное копирование информационной базы '${REF}' не выполнено&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&lt;br /&gt;
===Ставим задачу для планировщика cron===&lt;br /&gt;
&lt;br /&gt;
Под пользователем&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
в терминале открываем временный файл для настройки crontab&lt;br /&gt;
&lt;br /&gt;
 EDITOR=nano crontab -e&lt;br /&gt;
&lt;br /&gt;
в результате редактором&lt;br /&gt;
&lt;br /&gt;
 nano&lt;br /&gt;
&lt;br /&gt;
будет открыт временный файл для установки параметров планировщика для текущего пользователя. Отредактировав и сохранив (Ctrl+O - Enter) изменения в этом файле и закрыв редактор (Ctrl+X) будет сконфигурирован планировщик для текущего пользователя.&lt;br /&gt;
&lt;br /&gt;
Проверить корректность заданных параметров планировщика можно выполнением команды&lt;br /&gt;
&lt;br /&gt;
 crontab -l&lt;br /&gt;
&lt;br /&gt;
В случае, если планировщик был сконфигурирован на запуск скрипта резервного копирования каждые сутки с 23:01, вывод команды проверки должен быть примерно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#minute (0-59),&lt;br /&gt;
#|	hour (0-23),&lt;br /&gt;
#|	|	day of the month (1-31),&lt;br /&gt;
#|	|	|	month of the year (1-12),&lt;br /&gt;
#|	|	|	|	day of the week (0-6 with 0=Sunday).&lt;br /&gt;
#|	|	|	|	|	commands&lt;br /&gt;
1       23	*	*	*	/opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11393</id>
		<title>1c</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11393"/>
		<updated>2026-06-13T09:14:42Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: /* Внесение объектов в OData */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=В GNU/Linux=&lt;br /&gt;
&lt;br /&gt;
==Установка учебной платформы 8.5.x на ОС Альт Стартеркит p11 GNOME==&lt;br /&gt;
&lt;br /&gt;
===Обновить ОС и ядро===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get update -y &amp;amp;&amp;amp; apt-get dist-upgrade -y &amp;amp;&amp;amp; update-kernel -y&lt;br /&gt;
&lt;br /&gt;
===Поставить пакеты===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get install -f alt-tour evince firefox libwebkit2gtk 1c-preinstall-full libglui&lt;br /&gt;
&lt;br /&gt;
===Включить sudo su===&lt;br /&gt;
&lt;br /&gt;
Раскоментировать в файле:&lt;br /&gt;
&lt;br /&gt;
 /etc/sudoers&lt;br /&gt;
&lt;br /&gt;
строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
или строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) NOPASSWD: ALL&lt;br /&gt;
&lt;br /&gt;
(если необходимо выполнять sudo su без пароля)&lt;br /&gt;
&lt;br /&gt;
===Установить платформу===&lt;br /&gt;
&lt;br /&gt;
Предполагается, что есть файл установки платформы:&lt;br /&gt;
&lt;br /&gt;
 setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Тогда установка осуществляетс следующим образом:&lt;br /&gt;
&lt;br /&gt;
 chmod +x setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
 sudo ./setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Далее следуем инструкциям установщика. В установщике необходимо выбрать пункты &amp;quot;Установить ярлыки&amp;quot; и &amp;quot;Зависимости&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Установщик сам переключится в режим текстового интерфейса, если не найдёт дисплей (например, при установке по ssh). А вообще он имеет графический интерфейс...&lt;br /&gt;
&lt;br /&gt;
===Починить запуск платформы (актуально для ОС Альт веток p10 и p11 как минимум)===&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Получилось? Если да, то странно... Должна быть такая ошибка:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libicuuc.so.74)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjxl.so.0.11)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_12.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_13.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
&lt;br /&gt;
Не такая ошибка? Если да, то вы точно все пункты до этого выполнили (точно пакеты все установлены, которые выше в команде установки пакетовв перечислены)?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если ошибка такая, то чиним:&lt;br /&gt;
&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить ещё раз:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Всё должно работать. Теперь можно запускать платформу посредством ярлыков (кнопок меню приложений)&lt;br /&gt;
&lt;br /&gt;
По прежнему не запускается? Если да, то спешим на встречу новым приключениям!&lt;br /&gt;
&lt;br /&gt;
===Переопределить настройки по умолчанию для ОС Альт===&lt;br /&gt;
&lt;br /&gt;
====Каталог для файловых баз данных платформы 1С и sgid-bit====&lt;br /&gt;
&lt;br /&gt;
Поскольку полный путь до каталога с файловой базой данных будет фигурировать в конфигурационных файлах веб-сервера, его рекомендуется сделать отличным от пути по умолчанию, который предлагает платформа 1С (потому что в пути по умолчанию могут быть пробелы и кириллица).&lt;br /&gt;
&lt;br /&gt;
Например, так:&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/bases&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При публикации базы данных через веб-сервер необходимо чтобы у процесса веб-сервера, запущенного от пользователя&lt;br /&gt;
&lt;br /&gt;
 apache2&lt;br /&gt;
&lt;br /&gt;
был доступ на чтение и запись в каталог с базой данных конфигурации 1С.&lt;br /&gt;
&lt;br /&gt;
Один из вариантов это сделать следующий:&lt;br /&gt;
&lt;br /&gt;
1. Разрешаем членам группы-владельца каталога чтение и запись&lt;br /&gt;
&lt;br /&gt;
 sudo chmod g+rwx /home/user/bases -R&lt;br /&gt;
&lt;br /&gt;
2. Устанавливаем sgid бит на каталог&lt;br /&gt;
&lt;br /&gt;
 sudo chmod g+s /home/user/bases -R&lt;br /&gt;
&lt;br /&gt;
3. Добавляем пользователя apache2 в группу-владельца каталога&lt;br /&gt;
&lt;br /&gt;
 sudo usermod -aG user apache2&lt;br /&gt;
&lt;br /&gt;
==Публикация REST/Odata на веб-сервере==&lt;br /&gt;
&lt;br /&gt;
Предполагается что до этого были выполнены все действия в предыдущем разделе...&lt;br /&gt;
&lt;br /&gt;
===Устанавливаем и включаем веб-сервер apache2===&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install -y apache2&lt;br /&gt;
 sudo systemctl enable --now httpd2&lt;br /&gt;
&lt;br /&gt;
===Создаём симлинк для httpd2===&lt;br /&gt;
&lt;br /&gt;
Для скриптов платформы 1С это важно...&lt;br /&gt;
&lt;br /&gt;
 sudo ln -s /sbin/httpd2 /sbin/httpd&lt;br /&gt;
&lt;br /&gt;
===Публикуем командой===&lt;br /&gt;
&lt;br /&gt;
Сначала создаём файл (оно само не может):&lt;br /&gt;
&lt;br /&gt;
 sudo touch /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
Потом публикуем:&lt;br /&gt;
&lt;br /&gt;
 sudo HOME=/home/user /opt/1cv8t/x86_64/8.5.1.1150/webinstt -apache24 -wsdir odata_base -dir /var/www/odata_base -connstr &amp;quot;File=/home/user/bases/base1;&amp;quot; -confPath /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
В ответ должно прийти что-то типа этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация выполнена&lt;br /&gt;
&lt;br /&gt;
или этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация обновлена&lt;br /&gt;
&lt;br /&gt;
Примерное содержимое файла в контексте конфигурационных файлов веб-сервера apache2:&lt;br /&gt;
&lt;br /&gt;
 cat /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LoadModule _1cws_module &amp;quot;/opt/1cv8t/x86_64/8.5.1.1150/wsap24t.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 1c publication&lt;br /&gt;
Alias &amp;quot;/odata_base&amp;quot; &amp;quot;/var/www/odata_base/&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/odata_base/&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride All&lt;br /&gt;
    Options None&lt;br /&gt;
    Require all granted&lt;br /&gt;
    SetHandler 1c-application&lt;br /&gt;
    ManagedApplicationDescriptor &amp;quot;/var/www/odata_base/default.vrd&amp;quot;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Исправляем группу-владельца на файл ===&lt;br /&gt;
&lt;br /&gt;
По каким-то причинам после выполнения публикации утилитой webinstt файл:&lt;br /&gt;
&lt;br /&gt;
 /var/www/odata_base/default.vrd&lt;br /&gt;
&lt;br /&gt;
имеет группу-владельца:&lt;br /&gt;
&lt;br /&gt;
 apache&lt;br /&gt;
&lt;br /&gt;
(привет разработчикам платформы 1С, ориентирующимся, поди, на Ubuntu, а не на ОС из реестра минцифры)...&lt;br /&gt;
&lt;br /&gt;
Исправляем:&lt;br /&gt;
&lt;br /&gt;
 sudo chgrp apache2 /var/www/odata_base/default.vrd&lt;br /&gt;
&lt;br /&gt;
===Исправляем параметр в конфигурации сервиса===&lt;br /&gt;
&lt;br /&gt;
Исправляем значение параметра:&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i 's/ProtectHome=yes/ProtectHome=no/g' /lib/systemd/system/httpd2.service&lt;br /&gt;
&lt;br /&gt;
После этого перезагрузим демона systemd и сервис httpd2&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
 sudo systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
Перед редактированием конфигурации необходимо передать права на папку публикации самому веб-серверу. По умолчанию она может быть закрыта для него. Если этого не сделать, веб-сервер не сможет прочитать файл настроек default.vrd и вернет ошибку доступа при обращении к базе через браузер.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R apache2: /var/www/odata_base&lt;br /&gt;
chmod -R 755 /var/www/odata_base&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Домашние каталоги пользователей (например, /home/user/) по умолчанию полностью изолированы от системных служб. Чтобы веб-сервер apache2 смог добраться до папки с базой данных, ему нужно дать разрешение на «транзитный проход» сквозь вышестоящие директории. Флаг +x для папок как раз открывает эту возможность, не нарушая при этом приватность остальных личных файлов пользователя.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chmod a+x /home/user/&lt;br /&gt;
sudo chmod a+x /home/user/bases/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перед конфигурацией OData необходимо также предоставить веб-серверу права на чтение и запись внутри папки с самой базой. Чтобы не нарушать логику прав Linux и оставить пользователя владельцем файлов, мы добавляем apache2 в его группу и выставляем права 775 совместно с флагом SGID. Это позволит платформе беспрепятственно создавать файлы блокировок (.1CL), а новые файлы будут автоматически наследоваться группой.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chmod -R 2775 /home/user/bases/base1/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Перезапускаем веб-сервер===&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
===Проверяем публикацию===&lt;br /&gt;
Идём браузером по адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако данная веб-страница возвращает внутреннюю ошибку платформы 1С. По всей видимости, в текущем режиме совместимости конфигурации графический модуль для отображения данного стандартного окна не генерируется веб-сервером (отсутствуют необходимые JS-скрипты для рендеринга интерфейса).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&amp;quot;#exception&amp;quot;:&amp;quot;{http://v8.1c.ru/8.2/virtual-resource-system}Exception&amp;quot;,&amp;quot;exception&amp;quot;:{&amp;quot;clsid&amp;quot;:&amp;quot;580392e6-ba49-4280-ac67-fcd6f2180121&amp;quot;,&amp;quot;reason&amp;quot;:404,&amp;quot;descr&amp;quot;:&amp;quot;HTTP: Not found\nError executing the query GET to resource /en/scripts/mod_bootstrap_bootstrap.js:&amp;quot;,&amp;quot;category&amp;quot;:&amp;quot;00000000000000000000000000&amp;quot;,&amp;quot;creationStack&amp;quot;:&amp;quot;mngsrvt:0x0000000000252DF5 mngsrvt:0x000000000024F8F4 vrsbaset:0x00000000006D7791 vrsbaset:0x00000000006540C5 vrsbaset:0x00000000006EBDE6 vrsbaset:0x00000000006D2A9C vrsbaset:0x00000000006EC4A9 vrsbaset:0x00000000006ED4A0 core85t:0x00000000008D4EBF core85t:0x00000000006B238C libc.so:0x0000000000000000 libc.so:0x0000000000000000 &amp;quot;}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ещё один привет разработчикам платформы 1С, по всей видимости, совсем не ориентирующимся на ОС на базе GNU/Linux, раз в учебной версии под GNU/Linux с веб-интерфейсом что-то не так).&lt;br /&gt;
&lt;br /&gt;
НО!&lt;br /&gt;
&lt;br /&gt;
Это не помешает нам работать с OData REST!&lt;br /&gt;
&lt;br /&gt;
===Включение поддержки OData===&lt;br /&gt;
&lt;br /&gt;
Любым текстовым редактором открываем конфигурационный файл публикации:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /var/www/odata_base/default.vrd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Внутри тега &amp;lt;standardOdata&amp;gt; меняем значение параметра enable с false на true:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итоговый вид файла default.vrd:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;point xmlns=&amp;quot;http://v8.1c.ru/8.2/virtual-resource-system&amp;quot;&lt;br /&gt;
                xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
                xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
                base=&amp;quot;/odata_base&amp;quot;&lt;br /&gt;
                ib=&amp;quot;File=/home/user/bases/base1;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ws pointEnableCommon=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        reuseSessions=&amp;quot;autouse&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;20&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;10&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;analytics enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;1200&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;500&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/point&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В блоке&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        reuseSessions=&amp;quot;autouse&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;20&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;10&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
увеличьте значение параметра&lt;br /&gt;
&lt;br /&gt;
 sessionMaxAge&lt;br /&gt;
&lt;br /&gt;
до&lt;br /&gt;
&lt;br /&gt;
 1200&lt;br /&gt;
&lt;br /&gt;
чтобы доступ к REST на учебной версии платформы не блокировался (при нескольких запросах с малым значением параметра sessionMaxAge платформа будет создавать более одной сессии, а учебная версия предусматривает только одну сессию!).&lt;br /&gt;
&lt;br /&gt;
После изменения конфигурации перезапускаем службу веб-сервера для применения настроек:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart httpd2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки доступности интерфейса OData отправляем GET-запрос по адресу:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/odata/standard.odata?$format=json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример успешного ответа (корневой контейнер для пустой информационной базы):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;service xml:base=&amp;quot;http://localhost/odata_base/odata/standard.odata&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;workspace&amp;gt;&lt;br /&gt;
&amp;lt;atom:title&amp;gt;Default&amp;lt;/atom:title&amp;gt;&lt;br /&gt;
&amp;lt;/workspace&amp;gt;&lt;br /&gt;
&amp;lt;/service&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Внесение объектов в OData===&lt;br /&gt;
====Шаг 1. Создание внешней обработки====&lt;br /&gt;
Запустите Конфигуратор 1С, выберите в главном меню '''Файл''' -&amp;gt; '''Новый...''' и в открывшемся списке выберите '''Внешняя обработка'''.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-1.png|thumb|center|900px|Создание новой внешней обработки в Конфигураторе]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-2.png|thumb|center|900px|Выбор типа создаваемого документа]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 2. Настройка свойств и создание формы====&lt;br /&gt;
В открывшемся окне свойств новой обработки выполните следующие действия:&lt;br /&gt;
# '''Имя''': Задайте понятное имя (например, `НастройкаOData`).&lt;br /&gt;
# '''Создание формы''': Перейдите на вкладку '''Формы''' и нажмите на кнопку «Добавить», чтобы создать основную форму обработки. На этой форме мы разместим кнопку и пропишем логику внесения объектов в OData.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-3.png|thumb|center|900px|Настройка имени обработки и инициализация создания формы]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 3. Добавление команды и программного кода====&lt;br /&gt;
В редакторе формы перейдите на вкладку '''Команды''' (в правой части экрана) и добавьте новую команду формы, задав ей имя (например, `ВыполнитьНастройку`). &lt;br /&gt;
&lt;br /&gt;
Перетащите созданную команду мышкой в левую верхнюю часть окна — в структуру элементов формы, чтобы она превратилась в физическую кнопку. &lt;br /&gt;
&lt;br /&gt;
После этого нажмите правой кнопкой мыши по кнопке в левой части, выберите пункт '''Действие команды''' и в выпадающем меню выберите вариант: '''Создать на клиенте и процедуру на сервере без контекста'''.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-4.png|thumb|center|900px|Проектирование интерфейса формы и привязка клиент-серверного действия к кнопке]]&lt;br /&gt;
&lt;br /&gt;
В модуле формы замените сгенерированные шаблоны процедур следующим кодом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;НаКлиенте&lt;br /&gt;
Процедура ВыполнитьНастройку(Команда)&lt;br /&gt;
    ВыполнитьНастройкуНаСервере();&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
&lt;br /&gt;
&amp;amp;НаСервереБезКонтекста&lt;br /&gt;
Процедура ВыполнитьНастройкуНаСервере()&lt;br /&gt;
    // 1. Создаем массив для объектов, которые пойдут в веб-сервис&lt;br /&gt;
    МассивОбъектов = Новый Массив;&lt;br /&gt;
    &lt;br /&gt;
    // 2. Добавляем в массив необходимый справочник (например, Сотрудники)&lt;br /&gt;
    МассивОбъектов.Добавить(Метаданные.Справочники.Сотрудники);&lt;br /&gt;
    &lt;br /&gt;
    // 3. Передаем этот массив платформе для регистрации в OData&lt;br /&gt;
    УстановитьСоставСтандартногоИнтерфейсаOData(МассивОбъектов);&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Шаг 4. Сохранение обработки====&lt;br /&gt;
Закройте окна редактора формы и программного модуля. Вернувшись в основное окно создания внешней обработки, нажмите кнопку '''Закрыть'''. Платформа автоматически предложит сохранить изменения — выберите удобный каталог на диске и сохраните файл обработки (с расширением `.epf`).&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-5.png|thumb|center|900px|Процесс сохранения внешней обработки на диск]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 5. Запуск обработки в режиме предприятия====&lt;br /&gt;
Запустите 1С:Предприятие. В главном меню выберите '''Файл''' -&amp;gt; '''Открыть...''', найдите сохраненную ранее внешнюю обработку и откройте её. Если система безопасности выдаст предупреждение о потенциальной опасности подключаемого модуля, согласитесь с рисками и подтвердите открытие.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-6.png|thumb|center|900px|Открытие файла внешней обработки через пользовательский интерфейс 1С]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 6. Инициализация OData====&lt;br /&gt;
На экране появится созданная нами форма. Нажмите на ней кнопку '''Выполнить настройку'''. В этот момент отработает заложенная нами серверная логика, и состав стандартного интерфейса OData обновится. После этого обработку и само приложение 1С можно закрывать.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-7.png|thumb|center|900px|Финальное выполнение логики обработки по нажатию кнопки]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 7. Проверка доступности объектов в OData====&lt;br /&gt;
Чтобы убедиться, что внешняя обработка успешно зарегистрировала наши метаданные в веб-сервисе, откройте браузер и повторно отправьте GET-запрос по уже знакомому адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/odata/standard.odata&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если всё сделано правильно, в ответе от сервера (в формате JSON или XML, в зависимости от настроек) вместо пустого корневого контейнера вы увидите структуру метаданных, содержащую зарегистрированный нами справочник. &lt;br /&gt;
&lt;br /&gt;
Внутри тега `&amp;lt;workspace&amp;gt;` появится коллекция доступных сущностей (EntitySet), среди которых будет фигурировать URL для работы со справочником сотрудников: `Catalog_Сотрудники`.&lt;br /&gt;
&lt;br /&gt;
==Автоматизация резервного копирования информационных баз==&lt;br /&gt;
&lt;br /&gt;
Предполагается, что платформа &amp;quot;1С Предприятие&amp;quot; работает на GNU/Linux системе и скрипт резервного копирования выполняется от пользователя&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
, графическое окружение которого автоматически запускается после загрузки компьютера.&lt;br /&gt;
&lt;br /&gt;
Дело в том, что по каким-то причинам, разработчики платформы &amp;quot;1С Предприятие&amp;quot; не заложили в систему запуск резервного копирования в headless-режиме, поэтому платформе необходим дисплей X-сервера.&lt;br /&gt;
&lt;br /&gt;
Также предполагается, что файл с паролем от пользователя платформы &amp;quot;1С Предприятие&amp;quot;, которому разрешено выполнять резервное копирование, хранится в файле&lt;br /&gt;
&lt;br /&gt;
 /home/administrator/.1c-cluster-infobases-backup.pass&lt;br /&gt;
&lt;br /&gt;
и рекомендуемые права на этот файл&lt;br /&gt;
&lt;br /&gt;
 0400&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Подготовка каталога для скриптов===&lt;br /&gt;
&lt;br /&gt;
 mkdir /opt/1c_backup_scripts&lt;br /&gt;
&lt;br /&gt;
===Базовый скрипт===&lt;br /&gt;
&lt;br /&gt;
При необходимости, в тексте скрипта, отредактируйте строчку&lt;br /&gt;
&lt;br /&gt;
 bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
, указав путь до конкретной версии платформы &amp;quot;1С Предприятие&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже предоставлен текст, который можно выделить, скопировать в текстовый редактор, при необходимости поправить, затем весь этот текст можно бросить в консоль для создания файла посредством heredoc-синтаксиса:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup_infobase_1c_generic.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export LANG=ru_RU.UTF-8&lt;br /&gt;
&lt;br /&gt;
NON_ROOT_USER=&amp;quot;administrator&amp;quot;&lt;br /&gt;
DISPLAY=&amp;quot;:0&amp;quot;&lt;br /&gt;
STORAGE=&amp;quot;${1}&amp;quot;&lt;br /&gt;
SRV=&amp;quot;${2}&amp;quot;&lt;br /&gt;
REF=&amp;quot;${3}&amp;quot;&lt;br /&gt;
LOGIN=&amp;quot;${4}&amp;quot;&lt;br /&gt;
PASSWORD_FILE=&amp;quot;${5}&amp;quot;&lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;${6}&amp;quot;&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;${7}&amp;quot;&lt;br /&gt;
TIMEOUT_COUNTER=0&lt;br /&gt;
LOCK_FILE_PATH=&amp;quot;/home/usr1cv8/.1cv8/1C/1cv8/reg_1541/snccntx8e79a393-c2af-4fd7-b25a-af6b5ed19bfa/snccntx.dat&amp;quot;&lt;br /&gt;
#-----------------------------&lt;br /&gt;
export DISPLAY=&amp;quot;${DISPLAY}&amp;quot;&lt;br /&gt;
bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
PASSWORD=`cat ${PASSWORD_FILE} | head -1`&lt;br /&gt;
infobase_suffix=&amp;quot;$(date +%Y-%m-%d-%H-%M-%S).dt&amp;quot;&lt;br /&gt;
TMP_STORAGE=&amp;quot;/opt/1c_backup_scripts/tmp_storage&amp;quot;&lt;br /&gt;
ib_tmp_filepath=&amp;quot;${TMP_STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_tmp_log=&amp;quot;${ib_tmp_filepath}.log&amp;quot;&lt;br /&gt;
ib_filepath=&amp;quot;${STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_log=&amp;quot;${ib_filepath}.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function rotate_backups(){&lt;br /&gt;
filenames_cmd=&amp;quot;${STORAGE}/${REF}*&amp;quot;&lt;br /&gt;
current_unixtime=`date +%s --date=&amp;quot;$(date +%Y-%m-%d) 00:00:00&amp;quot;`&lt;br /&gt;
test_unixtime=$(($current_unixtime-$KEEP_BACKUPS_FOR_LAST_DAYS*60*60*24))&lt;br /&gt;
&lt;br /&gt;
for f in $(/bin/ls $filenames_cmd); do&lt;br /&gt;
#echo &amp;quot;f=$f&amp;quot;&lt;br /&gt;
datetime_from_file=`echo ${f} | awk -F '__' {'print $2'} | awk -F '.' {'print $1'}`&lt;br /&gt;
#echo &amp;quot;datetime_from_file=${datetime_from_file}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#2023-12-24-22-01-02&lt;br /&gt;
Y=`echo ${datetime_from_file} | awk -F '-' {'print $1'}`&lt;br /&gt;
M=`echo ${datetime_from_file} | awk -F '-' {'print $2'}`&lt;br /&gt;
D=`echo ${datetime_from_file} | awk -F '-' {'print $3'}`&lt;br /&gt;
h=`echo ${datetime_from_file} | awk -F '-' {'print $4'}`&lt;br /&gt;
m=`echo ${datetime_from_file} | awk -F '-' {'print $5'}`&lt;br /&gt;
s=`echo ${datetime_from_file} | awk -F '-' {'print $6'}`&lt;br /&gt;
&lt;br /&gt;
unixtime_from_file=`date +%s --date=&amp;quot;${Y}-${M}-${D} ${h}:${m}:${s}&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
if [[ $unixtime_from_file -lt $test_unixtime ]]; then&lt;br /&gt;
  echo &amp;quot;delete file: ${f}&amp;quot;&lt;br /&gt;
  /bin/rm ${f}&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;keep file: ${f}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function wait(){&lt;br /&gt;
&lt;br /&gt;
  if [[ $TIMEOUT_COUNTER -ge $BACKUP_TIMEOUT_SEC ]]; then&lt;br /&gt;
    kill -9 ${1}&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  if [ ! -d /proc/${1}/ ]; then&lt;br /&gt;
    nice_text=&amp;quot;Выгрузка информационной базы успешно завершена&amp;quot;&lt;br /&gt;
    res_text=$(grep -o -i &amp;quot;${nice_text}&amp;quot; ${ib_tmp_log})&lt;br /&gt;
&lt;br /&gt;
    # start apache2&lt;br /&gt;
    sudo systemctl start httpd2&lt;br /&gt;
&lt;br /&gt;
    if [ &amp;quot;${res_text}&amp;quot; = &amp;quot;${nice_text}&amp;quot; ]; then&lt;br /&gt;
      /bin/cp ${ib_tmp_filepath} ${ib_filepath} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_filepath}&lt;br /&gt;
      /bin/cp ${ib_tmp_log} ${ib_log} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_log}&lt;br /&gt;
      #echo &amp;quot;TEST: ${ib_filepath} AND ${ib_log}&amp;quot;&lt;br /&gt;
      rotate_backups&lt;br /&gt;
      exit 0&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    exit 1&lt;br /&gt;
  fi&lt;br /&gt;
  #echo &amp;quot;pid alive: ${1}&amp;quot;&lt;br /&gt;
  sleep 1&lt;br /&gt;
  TIMEOUT_COUNTER=$(($TIMEOUT_COUNTER+1))&lt;br /&gt;
  wait ${1}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# prepare tmp storage&lt;br /&gt;
[ ! -d ${TMP_STORAGE} ] &amp;amp;&amp;amp; sudo mkdir &amp;quot;${TMP_STORAGE}&amp;quot; &amp;amp;&amp;amp; sudo chown administrator: &amp;quot;${TMP_STORAGE}&amp;quot; -R&lt;br /&gt;
&lt;br /&gt;
# stop apache2&lt;br /&gt;
sudo systemctl stop httpd2&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
# reset srv1cv8 sessions&lt;br /&gt;
sudo systemctl stop srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
sudo /bin/rm -f &amp;quot;${LOCK_FILE_PATH}&amp;quot;&lt;br /&gt;
sudo systemctl start srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
DISPLAY=:0 XAUTHORITY=/home/administrator/.Xauthority ${bin1c} CONFIG /N &amp;quot;${LOGIN}&amp;quot; /P &amp;quot;${PASSWORD}&amp;quot; /S &amp;quot;${SRV}/${REF}&amp;quot; /DumpIB &amp;quot;${ib_tmp_filepath}&amp;quot; /OUT &amp;quot;${ib_tmp_log}&amp;quot; &amp;amp;&lt;br /&gt;
main_process_pid=$!&lt;br /&gt;
&lt;br /&gt;
wait ${main_process_pid}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup_infobase_1c_generic.sh&lt;br /&gt;
&lt;br /&gt;
===Скрипт для резервирования конкретной базы данных===&lt;br /&gt;
Данный скрипт представляет из себя обёртку над выше приведённым скриптом, с заданием конкретных параметров резервирования&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup__my_super_infobase.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
### PARAMETERS ###&lt;br /&gt;
STORAGE=&amp;quot;/mnt/storage/my-1c-host-backups&amp;quot; # каталог для сохранения резервных копий&lt;br /&gt;
SRV=&amp;quot;my-1c-host&amp;quot;                          # хост, на котором работает платформа &amp;quot;1С: Предприятие&amp;quot;&lt;br /&gt;
REF=&amp;quot;my_super_infobase&amp;quot;                   # имя базы данных, которую резервируем&lt;br /&gt;
LOGIN=&amp;quot;backupuser&amp;quot;                        # 1с-пользователь, которому разрешено резервировать базу данных&lt;br /&gt;
PASSWORD_FILE=&amp;quot;/home/administrator/.1c-cluster-infobases-backup.pass&amp;quot; # в этом файле должен находиться только пароль от 1с-пользоателя &lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;2&amp;quot;            # сохранить резервные копии только за эти несколько последных дней (в текущем примере - за 2 последних дня)&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;300&amp;quot;                  # таймаут, в течение которого разрешено работать процессу резервирования (процессу платформы &amp;quot;1С: Предприятие&amp;quot;. Если за этот таймаут процесс не успел сделать резервную копию, то он снимается с выполнения)&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### BOT PARAMETERS&lt;br /&gt;
TELEGRAM_BOT_TOKEN=&amp;quot;&amp;quot;             # сюда нужно вписать токен телеграм-бота, который будет отсылать уведомления&lt;br /&gt;
TELEGRAM_DESTINATION_GROUP_ID=&amp;quot;&amp;quot;  # сюда нужно вписать идентификатор телеграм-пользователя или телеграм-группы (не забывайте про минус в начале, если это идентификатор группы), в которого (или в которую, если это группа) бот будет писать сообщения&lt;br /&gt;
&lt;br /&gt;
function send_message_telegram(){&lt;br /&gt;
#exit 0  # раскомментируйте эту строчку, если отсылка сообщений телеграм-ботом не нужна (следовательно, и параметры дя бота при этом можно не задавать)&lt;br /&gt;
message=${1}&lt;br /&gt;
curl -s -X POST \&lt;br /&gt;
     -H 'Content-Type: application/json' \&lt;br /&gt;
     -d &amp;quot;{\&amp;quot;chat_id\&amp;quot;: \&amp;quot;${TELEGRAM_DESTINATION_GROUP_ID}\&amp;quot;, \&amp;quot;text\&amp;quot;: \&amp;quot;${message}\&amp;quot;, \&amp;quot;disable_notification\&amp;quot;: true}&amp;quot; \&lt;br /&gt;
     https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage &amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### START ###&lt;br /&gt;
BASE=`dirname ${0}`&lt;br /&gt;
${BASE}/backup_infobase_1c_generic.sh &amp;quot;${STORAGE}&amp;quot; &amp;quot;${SRV}&amp;quot; &amp;quot;${REF}&amp;quot; &amp;quot;${LOGIN}&amp;quot; &amp;quot;${PASSWORD_FILE}&amp;quot; &amp;quot;${KEEP_BACKUPS_FOR_LAST_DAYS}&amp;quot; &amp;quot;${BACKUP_TIMEOUT_SEC}&amp;quot;&lt;br /&gt;
res=$?&lt;br /&gt;
&lt;br /&gt;
if [ ${res} -eq 0 ]; then&lt;br /&gt;
send_message_telegram &amp;quot;[Успешно]\nРезервное копирование информационной базы '${REF}' выполнено успешно&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
send_message_telegram &amp;quot;[Ошибка]\nРезервное копирование информационной базы '${REF}' не выполнено&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&lt;br /&gt;
===Ставим задачу для планировщика cron===&lt;br /&gt;
&lt;br /&gt;
Под пользователем&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
в терминале открываем временный файл для настройки crontab&lt;br /&gt;
&lt;br /&gt;
 EDITOR=nano crontab -e&lt;br /&gt;
&lt;br /&gt;
в результате редактором&lt;br /&gt;
&lt;br /&gt;
 nano&lt;br /&gt;
&lt;br /&gt;
будет открыт временный файл для установки параметров планировщика для текущего пользователя. Отредактировав и сохранив (Ctrl+O - Enter) изменения в этом файле и закрыв редактор (Ctrl+X) будет сконфигурирован планировщик для текущего пользователя.&lt;br /&gt;
&lt;br /&gt;
Проверить корректность заданных параметров планировщика можно выполнением команды&lt;br /&gt;
&lt;br /&gt;
 crontab -l&lt;br /&gt;
&lt;br /&gt;
В случае, если планировщик был сконфигурирован на запуск скрипта резервного копирования каждые сутки с 23:01, вывод команды проверки должен быть примерно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#minute (0-59),&lt;br /&gt;
#|	hour (0-23),&lt;br /&gt;
#|	|	day of the month (1-31),&lt;br /&gt;
#|	|	|	month of the year (1-12),&lt;br /&gt;
#|	|	|	|	day of the week (0-6 with 0=Sunday).&lt;br /&gt;
#|	|	|	|	|	commands&lt;br /&gt;
1       23	*	*	*	/opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11392</id>
		<title>1c</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11392"/>
		<updated>2026-06-13T09:13:34Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: /* Внесение объектов в OData */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=В GNU/Linux=&lt;br /&gt;
&lt;br /&gt;
==Установка учебной платформы 8.5.x на ОС Альт Стартеркит p11 GNOME==&lt;br /&gt;
&lt;br /&gt;
===Обновить ОС и ядро===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get update -y &amp;amp;&amp;amp; apt-get dist-upgrade -y &amp;amp;&amp;amp; update-kernel -y&lt;br /&gt;
&lt;br /&gt;
===Поставить пакеты===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get install -f alt-tour evince firefox libwebkit2gtk 1c-preinstall-full libglui&lt;br /&gt;
&lt;br /&gt;
===Включить sudo su===&lt;br /&gt;
&lt;br /&gt;
Раскоментировать в файле:&lt;br /&gt;
&lt;br /&gt;
 /etc/sudoers&lt;br /&gt;
&lt;br /&gt;
строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
или строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) NOPASSWD: ALL&lt;br /&gt;
&lt;br /&gt;
(если необходимо выполнять sudo su без пароля)&lt;br /&gt;
&lt;br /&gt;
===Установить платформу===&lt;br /&gt;
&lt;br /&gt;
Предполагается, что есть файл установки платформы:&lt;br /&gt;
&lt;br /&gt;
 setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Тогда установка осуществляетс следующим образом:&lt;br /&gt;
&lt;br /&gt;
 chmod +x setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
 sudo ./setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Далее следуем инструкциям установщика. В установщике необходимо выбрать пункты &amp;quot;Установить ярлыки&amp;quot; и &amp;quot;Зависимости&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Установщик сам переключится в режим текстового интерфейса, если не найдёт дисплей (например, при установке по ssh). А вообще он имеет графический интерфейс...&lt;br /&gt;
&lt;br /&gt;
===Починить запуск платформы (актуально для ОС Альт веток p10 и p11 как минимум)===&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Получилось? Если да, то странно... Должна быть такая ошибка:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libicuuc.so.74)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjxl.so.0.11)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_12.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_13.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
&lt;br /&gt;
Не такая ошибка? Если да, то вы точно все пункты до этого выполнили (точно пакеты все установлены, которые выше в команде установки пакетовв перечислены)?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если ошибка такая, то чиним:&lt;br /&gt;
&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить ещё раз:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Всё должно работать. Теперь можно запускать платформу посредством ярлыков (кнопок меню приложений)&lt;br /&gt;
&lt;br /&gt;
По прежнему не запускается? Если да, то спешим на встречу новым приключениям!&lt;br /&gt;
&lt;br /&gt;
===Переопределить настройки по умолчанию для ОС Альт===&lt;br /&gt;
&lt;br /&gt;
====Каталог для файловых баз данных платформы 1С и sgid-bit====&lt;br /&gt;
&lt;br /&gt;
Поскольку полный путь до каталога с файловой базой данных будет фигурировать в конфигурационных файлах веб-сервера, его рекомендуется сделать отличным от пути по умолчанию, который предлагает платформа 1С (потому что в пути по умолчанию могут быть пробелы и кириллица).&lt;br /&gt;
&lt;br /&gt;
Например, так:&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/bases&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При публикации базы данных через веб-сервер необходимо чтобы у процесса веб-сервера, запущенного от пользователя&lt;br /&gt;
&lt;br /&gt;
 apache2&lt;br /&gt;
&lt;br /&gt;
был доступ на чтение и запись в каталог с базой данных конфигурации 1С.&lt;br /&gt;
&lt;br /&gt;
Один из вариантов это сделать следующий:&lt;br /&gt;
&lt;br /&gt;
1. Разрешаем членам группы-владельца каталога чтение и запись&lt;br /&gt;
&lt;br /&gt;
 sudo chmod g+rwx /home/user/bases -R&lt;br /&gt;
&lt;br /&gt;
2. Устанавливаем sgid бит на каталог&lt;br /&gt;
&lt;br /&gt;
 sudo chmod g+s /home/user/bases -R&lt;br /&gt;
&lt;br /&gt;
3. Добавляем пользователя apache2 в группу-владельца каталога&lt;br /&gt;
&lt;br /&gt;
 sudo usermod -aG user apache2&lt;br /&gt;
&lt;br /&gt;
==Публикация REST/Odata на веб-сервере==&lt;br /&gt;
&lt;br /&gt;
Предполагается что до этого были выполнены все действия в предыдущем разделе...&lt;br /&gt;
&lt;br /&gt;
===Устанавливаем и включаем веб-сервер apache2===&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install -y apache2&lt;br /&gt;
 sudo systemctl enable --now httpd2&lt;br /&gt;
&lt;br /&gt;
===Создаём симлинк для httpd2===&lt;br /&gt;
&lt;br /&gt;
Для скриптов платформы 1С это важно...&lt;br /&gt;
&lt;br /&gt;
 sudo ln -s /sbin/httpd2 /sbin/httpd&lt;br /&gt;
&lt;br /&gt;
===Публикуем командой===&lt;br /&gt;
&lt;br /&gt;
Сначала создаём файл (оно само не может):&lt;br /&gt;
&lt;br /&gt;
 sudo touch /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
Потом публикуем:&lt;br /&gt;
&lt;br /&gt;
 sudo HOME=/home/user /opt/1cv8t/x86_64/8.5.1.1150/webinstt -apache24 -wsdir odata_base -dir /var/www/odata_base -connstr &amp;quot;File=/home/user/bases/base1;&amp;quot; -confPath /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
В ответ должно прийти что-то типа этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация выполнена&lt;br /&gt;
&lt;br /&gt;
или этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация обновлена&lt;br /&gt;
&lt;br /&gt;
Примерное содержимое файла в контексте конфигурационных файлов веб-сервера apache2:&lt;br /&gt;
&lt;br /&gt;
 cat /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LoadModule _1cws_module &amp;quot;/opt/1cv8t/x86_64/8.5.1.1150/wsap24t.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 1c publication&lt;br /&gt;
Alias &amp;quot;/odata_base&amp;quot; &amp;quot;/var/www/odata_base/&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/odata_base/&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride All&lt;br /&gt;
    Options None&lt;br /&gt;
    Require all granted&lt;br /&gt;
    SetHandler 1c-application&lt;br /&gt;
    ManagedApplicationDescriptor &amp;quot;/var/www/odata_base/default.vrd&amp;quot;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Исправляем группу-владельца на файл ===&lt;br /&gt;
&lt;br /&gt;
По каким-то причинам после выполнения публикации утилитой webinstt файл:&lt;br /&gt;
&lt;br /&gt;
 /var/www/odata_base/default.vrd&lt;br /&gt;
&lt;br /&gt;
имеет группу-владельца:&lt;br /&gt;
&lt;br /&gt;
 apache&lt;br /&gt;
&lt;br /&gt;
(привет разработчикам платформы 1С, ориентирующимся, поди, на Ubuntu, а не на ОС из реестра минцифры)...&lt;br /&gt;
&lt;br /&gt;
Исправляем:&lt;br /&gt;
&lt;br /&gt;
 sudo chgrp apache2 /var/www/odata_base/default.vrd&lt;br /&gt;
&lt;br /&gt;
===Исправляем параметр в конфигурации сервиса===&lt;br /&gt;
&lt;br /&gt;
Исправляем значение параметра:&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i 's/ProtectHome=yes/ProtectHome=no/g' /lib/systemd/system/httpd2.service&lt;br /&gt;
&lt;br /&gt;
После этого перезагрузим демона systemd и сервис httpd2&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
 sudo systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
Перед редактированием конфигурации необходимо передать права на папку публикации самому веб-серверу. По умолчанию она может быть закрыта для него. Если этого не сделать, веб-сервер не сможет прочитать файл настроек default.vrd и вернет ошибку доступа при обращении к базе через браузер.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R apache2: /var/www/odata_base&lt;br /&gt;
chmod -R 755 /var/www/odata_base&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Домашние каталоги пользователей (например, /home/user/) по умолчанию полностью изолированы от системных служб. Чтобы веб-сервер apache2 смог добраться до папки с базой данных, ему нужно дать разрешение на «транзитный проход» сквозь вышестоящие директории. Флаг +x для папок как раз открывает эту возможность, не нарушая при этом приватность остальных личных файлов пользователя.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chmod a+x /home/user/&lt;br /&gt;
sudo chmod a+x /home/user/bases/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перед конфигурацией OData необходимо также предоставить веб-серверу права на чтение и запись внутри папки с самой базой. Чтобы не нарушать логику прав Linux и оставить пользователя владельцем файлов, мы добавляем apache2 в его группу и выставляем права 775 совместно с флагом SGID. Это позволит платформе беспрепятственно создавать файлы блокировок (.1CL), а новые файлы будут автоматически наследоваться группой.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chmod -R 2775 /home/user/bases/base1/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Перезапускаем веб-сервер===&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
===Проверяем публикацию===&lt;br /&gt;
Идём браузером по адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако данная веб-страница возвращает внутреннюю ошибку платформы 1С. По всей видимости, в текущем режиме совместимости конфигурации графический модуль для отображения данного стандартного окна не генерируется веб-сервером (отсутствуют необходимые JS-скрипты для рендеринга интерфейса).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&amp;quot;#exception&amp;quot;:&amp;quot;{http://v8.1c.ru/8.2/virtual-resource-system}Exception&amp;quot;,&amp;quot;exception&amp;quot;:{&amp;quot;clsid&amp;quot;:&amp;quot;580392e6-ba49-4280-ac67-fcd6f2180121&amp;quot;,&amp;quot;reason&amp;quot;:404,&amp;quot;descr&amp;quot;:&amp;quot;HTTP: Not found\nError executing the query GET to resource /en/scripts/mod_bootstrap_bootstrap.js:&amp;quot;,&amp;quot;category&amp;quot;:&amp;quot;00000000000000000000000000&amp;quot;,&amp;quot;creationStack&amp;quot;:&amp;quot;mngsrvt:0x0000000000252DF5 mngsrvt:0x000000000024F8F4 vrsbaset:0x00000000006D7791 vrsbaset:0x00000000006540C5 vrsbaset:0x00000000006EBDE6 vrsbaset:0x00000000006D2A9C vrsbaset:0x00000000006EC4A9 vrsbaset:0x00000000006ED4A0 core85t:0x00000000008D4EBF core85t:0x00000000006B238C libc.so:0x0000000000000000 libc.so:0x0000000000000000 &amp;quot;}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ещё один привет разработчикам платформы 1С, по всей видимости, совсем не ориентирующимся на ОС на базе GNU/Linux, раз в учебной версии под GNU/Linux с веб-интерфейсом что-то не так).&lt;br /&gt;
&lt;br /&gt;
НО!&lt;br /&gt;
&lt;br /&gt;
Это не помешает нам работать с OData REST!&lt;br /&gt;
&lt;br /&gt;
===Включение поддержки OData===&lt;br /&gt;
&lt;br /&gt;
Любым текстовым редактором открываем конфигурационный файл публикации:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /var/www/odata_base/default.vrd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Внутри тега &amp;lt;standardOdata&amp;gt; меняем значение параметра enable с false на true:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итоговый вид файла default.vrd:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;point xmlns=&amp;quot;http://v8.1c.ru/8.2/virtual-resource-system&amp;quot;&lt;br /&gt;
                xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
                xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
                base=&amp;quot;/odata_base&amp;quot;&lt;br /&gt;
                ib=&amp;quot;File=/home/user/bases/base1;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ws pointEnableCommon=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        reuseSessions=&amp;quot;autouse&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;20&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;10&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;analytics enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;1200&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;500&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/point&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В блоке&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        reuseSessions=&amp;quot;autouse&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;20&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;10&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
увеличьте значение параметра&lt;br /&gt;
&lt;br /&gt;
 sessionMaxAge&lt;br /&gt;
&lt;br /&gt;
до&lt;br /&gt;
&lt;br /&gt;
 1200&lt;br /&gt;
&lt;br /&gt;
чтобы доступ к REST на учебной версии платформы не блокировался (при нескольких запросах с малым значением параметра sessionMaxAge платформа будет создавать более одной сессии, а учебная версия предусматривает только одну сессию!).&lt;br /&gt;
&lt;br /&gt;
После изменения конфигурации перезапускаем службу веб-сервера для применения настроек:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart httpd2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки доступности интерфейса OData отправляем GET-запрос по адресу:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/odata/standard.odata?$format=json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример успешного ответа (корневой контейнер для пустой информационной базы):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;service xml:base=&amp;quot;http://localhost/odata_base/odata/standard.odata&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;workspace&amp;gt;&lt;br /&gt;
&amp;lt;atom:title&amp;gt;Default&amp;lt;/atom:title&amp;gt;&lt;br /&gt;
&amp;lt;/workspace&amp;gt;&lt;br /&gt;
&amp;lt;/service&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Внесение объектов в OData===&lt;br /&gt;
&lt;br /&gt;
Поскольку в учебной версии платформы состав метаданных, доступных через автоматический REST-сервис, изначально пуст, нам необходимо программно указать платформе, какие именно объекты нужно отдавать наружу. Для этого мы создадим и выполним специальную внешнюю обработку.&lt;br /&gt;
&lt;br /&gt;
====Шаг 1. Создание внешней обработки====&lt;br /&gt;
Запустите Конфигуратор 1С, выберите в главном меню '''Файл''' -&amp;gt; '''Новый...''' и в открывшемся списке выберите '''Внешняя обработка'''.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-1.png|thumb|center|900px|Создание новой внешней обработки в Конфигураторе]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-2.png|thumb|center|900px|Выбор типа создаваемого документа]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 2. Настройка свойств и создание формы====&lt;br /&gt;
В открывшемся окне свойств новой обработки выполните следующие действия:&lt;br /&gt;
# '''Имя''': Задайте понятное имя (например, `НастройкаOData`).&lt;br /&gt;
# '''Создание формы''': Перейдите на вкладку '''Формы''' и нажмите на кнопку «Добавить», чтобы создать основную форму обработки. На этой форме мы разместим кнопку и пропишем логику внесения объектов в OData.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-3.png|thumb|center|900px|Настройка имени обработки и инициализация создания формы]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 3. Добавление команды и программного кода====&lt;br /&gt;
В редакторе формы перейдите на вкладку '''Команды''' (в правой части экрана) и добавьте новую команду формы, задав ей имя (например, `ВыполнитьНастройку`). &lt;br /&gt;
&lt;br /&gt;
Перетащите созданную команду мышкой в левую верхнюю часть окна — в структуру элементов формы, чтобы она превратилась в физическую кнопку. &lt;br /&gt;
&lt;br /&gt;
После этого нажмите правой кнопкой мыши по кнопке в левой части, выберите пункт '''Действие команды''' и в выпадающем меню выберите вариант: '''Создать на клиенте и процедуру на сервере без контекста'''.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-4.png|thumb|center|900px|Проектирование интерфейса формы и привязка клиент-серверного действия к кнопке]]&lt;br /&gt;
&lt;br /&gt;
В модуле формы замените сгенерированные шаблоны процедур следующим кодом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;НаКлиенте&lt;br /&gt;
Процедура ВыполнитьНастройку(Команда)&lt;br /&gt;
    ВыполнитьНастройкуНаСервере();&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
&lt;br /&gt;
&amp;amp;НаСервереБезКонтекста&lt;br /&gt;
Процедура ВыполнитьНастройкуНаСервере()&lt;br /&gt;
    // 1. Создаем массив для объектов, которые пойдут в веб-сервис&lt;br /&gt;
    МассивОбъектов = Новый Массив;&lt;br /&gt;
    &lt;br /&gt;
    // 2. Добавляем в массив необходимый справочник (например, Сотрудники)&lt;br /&gt;
    МассивОбъектов.Добавить(Метаданные.Справочники.Сотрудники);&lt;br /&gt;
    &lt;br /&gt;
    // 3. Передаем этот массив платформе для регистрации в OData&lt;br /&gt;
    УстановитьСоставСтандартногоИнтерфейсаOData(МассивОбъектов);&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Шаг 4. Сохранение обработки====&lt;br /&gt;
Закройте окна редактора формы и программного модуля. Вернувшись в основное окно создания внешней обработки, нажмите кнопку '''Закрыть'''. Платформа автоматически предложит сохранить изменения — выберите удобный каталог на диске и сохраните файл обработки (с расширением `.epf`).&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-5.png|thumb|center|900px|Процесс сохранения внешней обработки на диск]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 5. Запуск обработки в режиме предприятия====&lt;br /&gt;
Запустите 1С:Предприятие. В главном меню выберите '''Файл''' -&amp;gt; '''Открыть...''', найдите сохраненную ранее внешнюю обработку и откройте её. Если система безопасности выдаст предупреждение о потенциальной опасности подключаемого модуля, согласитесь с рисками и подтвердите открытие.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-6.png|thumb|center|900px|Открытие файла внешней обработки через пользовательский интерфейс 1С]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 6. Инициализация OData====&lt;br /&gt;
На экране появится созданная нами форма. Нажмите на ней кнопку '''Выполнить настройку'''. В этот момент отработает заложенная нами серверная логика, и состав стандартного интерфейса OData обновится. После этого обработку и само приложение 1С можно закрывать.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-7.png|thumb|center|900px|Финальное выполнение логики обработки по нажатию кнопки]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 7. Проверка доступности объектов в OData====&lt;br /&gt;
Чтобы убедиться, что внешняя обработка успешно зарегистрировала наши метаданные в веб-сервисе, откройте браузер и повторно отправьте GET-запрос по уже знакомому адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/odata/standard.odata&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если всё сделано правильно, в ответе от сервера (в формате JSON или XML, в зависимости от настроек) вместо пустого корневого контейнера вы увидите структуру метаданных, содержащую зарегистрированный нами справочник. &lt;br /&gt;
&lt;br /&gt;
Внутри тега `&amp;lt;workspace&amp;gt;` появится коллекция доступных сущностей (EntitySet), среди которых будет фигурировать URL для работы со справочником сотрудников: `Catalog_Сотрудники`.&lt;br /&gt;
&lt;br /&gt;
==Автоматизация резервного копирования информационных баз==&lt;br /&gt;
&lt;br /&gt;
Предполагается, что платформа &amp;quot;1С Предприятие&amp;quot; работает на GNU/Linux системе и скрипт резервного копирования выполняется от пользователя&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
, графическое окружение которого автоматически запускается после загрузки компьютера.&lt;br /&gt;
&lt;br /&gt;
Дело в том, что по каким-то причинам, разработчики платформы &amp;quot;1С Предприятие&amp;quot; не заложили в систему запуск резервного копирования в headless-режиме, поэтому платформе необходим дисплей X-сервера.&lt;br /&gt;
&lt;br /&gt;
Также предполагается, что файл с паролем от пользователя платформы &amp;quot;1С Предприятие&amp;quot;, которому разрешено выполнять резервное копирование, хранится в файле&lt;br /&gt;
&lt;br /&gt;
 /home/administrator/.1c-cluster-infobases-backup.pass&lt;br /&gt;
&lt;br /&gt;
и рекомендуемые права на этот файл&lt;br /&gt;
&lt;br /&gt;
 0400&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Подготовка каталога для скриптов===&lt;br /&gt;
&lt;br /&gt;
 mkdir /opt/1c_backup_scripts&lt;br /&gt;
&lt;br /&gt;
===Базовый скрипт===&lt;br /&gt;
&lt;br /&gt;
При необходимости, в тексте скрипта, отредактируйте строчку&lt;br /&gt;
&lt;br /&gt;
 bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
, указав путь до конкретной версии платформы &amp;quot;1С Предприятие&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже предоставлен текст, который можно выделить, скопировать в текстовый редактор, при необходимости поправить, затем весь этот текст можно бросить в консоль для создания файла посредством heredoc-синтаксиса:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup_infobase_1c_generic.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export LANG=ru_RU.UTF-8&lt;br /&gt;
&lt;br /&gt;
NON_ROOT_USER=&amp;quot;administrator&amp;quot;&lt;br /&gt;
DISPLAY=&amp;quot;:0&amp;quot;&lt;br /&gt;
STORAGE=&amp;quot;${1}&amp;quot;&lt;br /&gt;
SRV=&amp;quot;${2}&amp;quot;&lt;br /&gt;
REF=&amp;quot;${3}&amp;quot;&lt;br /&gt;
LOGIN=&amp;quot;${4}&amp;quot;&lt;br /&gt;
PASSWORD_FILE=&amp;quot;${5}&amp;quot;&lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;${6}&amp;quot;&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;${7}&amp;quot;&lt;br /&gt;
TIMEOUT_COUNTER=0&lt;br /&gt;
LOCK_FILE_PATH=&amp;quot;/home/usr1cv8/.1cv8/1C/1cv8/reg_1541/snccntx8e79a393-c2af-4fd7-b25a-af6b5ed19bfa/snccntx.dat&amp;quot;&lt;br /&gt;
#-----------------------------&lt;br /&gt;
export DISPLAY=&amp;quot;${DISPLAY}&amp;quot;&lt;br /&gt;
bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
PASSWORD=`cat ${PASSWORD_FILE} | head -1`&lt;br /&gt;
infobase_suffix=&amp;quot;$(date +%Y-%m-%d-%H-%M-%S).dt&amp;quot;&lt;br /&gt;
TMP_STORAGE=&amp;quot;/opt/1c_backup_scripts/tmp_storage&amp;quot;&lt;br /&gt;
ib_tmp_filepath=&amp;quot;${TMP_STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_tmp_log=&amp;quot;${ib_tmp_filepath}.log&amp;quot;&lt;br /&gt;
ib_filepath=&amp;quot;${STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_log=&amp;quot;${ib_filepath}.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function rotate_backups(){&lt;br /&gt;
filenames_cmd=&amp;quot;${STORAGE}/${REF}*&amp;quot;&lt;br /&gt;
current_unixtime=`date +%s --date=&amp;quot;$(date +%Y-%m-%d) 00:00:00&amp;quot;`&lt;br /&gt;
test_unixtime=$(($current_unixtime-$KEEP_BACKUPS_FOR_LAST_DAYS*60*60*24))&lt;br /&gt;
&lt;br /&gt;
for f in $(/bin/ls $filenames_cmd); do&lt;br /&gt;
#echo &amp;quot;f=$f&amp;quot;&lt;br /&gt;
datetime_from_file=`echo ${f} | awk -F '__' {'print $2'} | awk -F '.' {'print $1'}`&lt;br /&gt;
#echo &amp;quot;datetime_from_file=${datetime_from_file}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#2023-12-24-22-01-02&lt;br /&gt;
Y=`echo ${datetime_from_file} | awk -F '-' {'print $1'}`&lt;br /&gt;
M=`echo ${datetime_from_file} | awk -F '-' {'print $2'}`&lt;br /&gt;
D=`echo ${datetime_from_file} | awk -F '-' {'print $3'}`&lt;br /&gt;
h=`echo ${datetime_from_file} | awk -F '-' {'print $4'}`&lt;br /&gt;
m=`echo ${datetime_from_file} | awk -F '-' {'print $5'}`&lt;br /&gt;
s=`echo ${datetime_from_file} | awk -F '-' {'print $6'}`&lt;br /&gt;
&lt;br /&gt;
unixtime_from_file=`date +%s --date=&amp;quot;${Y}-${M}-${D} ${h}:${m}:${s}&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
if [[ $unixtime_from_file -lt $test_unixtime ]]; then&lt;br /&gt;
  echo &amp;quot;delete file: ${f}&amp;quot;&lt;br /&gt;
  /bin/rm ${f}&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;keep file: ${f}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function wait(){&lt;br /&gt;
&lt;br /&gt;
  if [[ $TIMEOUT_COUNTER -ge $BACKUP_TIMEOUT_SEC ]]; then&lt;br /&gt;
    kill -9 ${1}&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  if [ ! -d /proc/${1}/ ]; then&lt;br /&gt;
    nice_text=&amp;quot;Выгрузка информационной базы успешно завершена&amp;quot;&lt;br /&gt;
    res_text=$(grep -o -i &amp;quot;${nice_text}&amp;quot; ${ib_tmp_log})&lt;br /&gt;
&lt;br /&gt;
    # start apache2&lt;br /&gt;
    sudo systemctl start httpd2&lt;br /&gt;
&lt;br /&gt;
    if [ &amp;quot;${res_text}&amp;quot; = &amp;quot;${nice_text}&amp;quot; ]; then&lt;br /&gt;
      /bin/cp ${ib_tmp_filepath} ${ib_filepath} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_filepath}&lt;br /&gt;
      /bin/cp ${ib_tmp_log} ${ib_log} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_log}&lt;br /&gt;
      #echo &amp;quot;TEST: ${ib_filepath} AND ${ib_log}&amp;quot;&lt;br /&gt;
      rotate_backups&lt;br /&gt;
      exit 0&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    exit 1&lt;br /&gt;
  fi&lt;br /&gt;
  #echo &amp;quot;pid alive: ${1}&amp;quot;&lt;br /&gt;
  sleep 1&lt;br /&gt;
  TIMEOUT_COUNTER=$(($TIMEOUT_COUNTER+1))&lt;br /&gt;
  wait ${1}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# prepare tmp storage&lt;br /&gt;
[ ! -d ${TMP_STORAGE} ] &amp;amp;&amp;amp; sudo mkdir &amp;quot;${TMP_STORAGE}&amp;quot; &amp;amp;&amp;amp; sudo chown administrator: &amp;quot;${TMP_STORAGE}&amp;quot; -R&lt;br /&gt;
&lt;br /&gt;
# stop apache2&lt;br /&gt;
sudo systemctl stop httpd2&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
# reset srv1cv8 sessions&lt;br /&gt;
sudo systemctl stop srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
sudo /bin/rm -f &amp;quot;${LOCK_FILE_PATH}&amp;quot;&lt;br /&gt;
sudo systemctl start srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
DISPLAY=:0 XAUTHORITY=/home/administrator/.Xauthority ${bin1c} CONFIG /N &amp;quot;${LOGIN}&amp;quot; /P &amp;quot;${PASSWORD}&amp;quot; /S &amp;quot;${SRV}/${REF}&amp;quot; /DumpIB &amp;quot;${ib_tmp_filepath}&amp;quot; /OUT &amp;quot;${ib_tmp_log}&amp;quot; &amp;amp;&lt;br /&gt;
main_process_pid=$!&lt;br /&gt;
&lt;br /&gt;
wait ${main_process_pid}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup_infobase_1c_generic.sh&lt;br /&gt;
&lt;br /&gt;
===Скрипт для резервирования конкретной базы данных===&lt;br /&gt;
Данный скрипт представляет из себя обёртку над выше приведённым скриптом, с заданием конкретных параметров резервирования&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup__my_super_infobase.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
### PARAMETERS ###&lt;br /&gt;
STORAGE=&amp;quot;/mnt/storage/my-1c-host-backups&amp;quot; # каталог для сохранения резервных копий&lt;br /&gt;
SRV=&amp;quot;my-1c-host&amp;quot;                          # хост, на котором работает платформа &amp;quot;1С: Предприятие&amp;quot;&lt;br /&gt;
REF=&amp;quot;my_super_infobase&amp;quot;                   # имя базы данных, которую резервируем&lt;br /&gt;
LOGIN=&amp;quot;backupuser&amp;quot;                        # 1с-пользователь, которому разрешено резервировать базу данных&lt;br /&gt;
PASSWORD_FILE=&amp;quot;/home/administrator/.1c-cluster-infobases-backup.pass&amp;quot; # в этом файле должен находиться только пароль от 1с-пользоателя &lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;2&amp;quot;            # сохранить резервные копии только за эти несколько последных дней (в текущем примере - за 2 последних дня)&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;300&amp;quot;                  # таймаут, в течение которого разрешено работать процессу резервирования (процессу платформы &amp;quot;1С: Предприятие&amp;quot;. Если за этот таймаут процесс не успел сделать резервную копию, то он снимается с выполнения)&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### BOT PARAMETERS&lt;br /&gt;
TELEGRAM_BOT_TOKEN=&amp;quot;&amp;quot;             # сюда нужно вписать токен телеграм-бота, который будет отсылать уведомления&lt;br /&gt;
TELEGRAM_DESTINATION_GROUP_ID=&amp;quot;&amp;quot;  # сюда нужно вписать идентификатор телеграм-пользователя или телеграм-группы (не забывайте про минус в начале, если это идентификатор группы), в которого (или в которую, если это группа) бот будет писать сообщения&lt;br /&gt;
&lt;br /&gt;
function send_message_telegram(){&lt;br /&gt;
#exit 0  # раскомментируйте эту строчку, если отсылка сообщений телеграм-ботом не нужна (следовательно, и параметры дя бота при этом можно не задавать)&lt;br /&gt;
message=${1}&lt;br /&gt;
curl -s -X POST \&lt;br /&gt;
     -H 'Content-Type: application/json' \&lt;br /&gt;
     -d &amp;quot;{\&amp;quot;chat_id\&amp;quot;: \&amp;quot;${TELEGRAM_DESTINATION_GROUP_ID}\&amp;quot;, \&amp;quot;text\&amp;quot;: \&amp;quot;${message}\&amp;quot;, \&amp;quot;disable_notification\&amp;quot;: true}&amp;quot; \&lt;br /&gt;
     https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage &amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### START ###&lt;br /&gt;
BASE=`dirname ${0}`&lt;br /&gt;
${BASE}/backup_infobase_1c_generic.sh &amp;quot;${STORAGE}&amp;quot; &amp;quot;${SRV}&amp;quot; &amp;quot;${REF}&amp;quot; &amp;quot;${LOGIN}&amp;quot; &amp;quot;${PASSWORD_FILE}&amp;quot; &amp;quot;${KEEP_BACKUPS_FOR_LAST_DAYS}&amp;quot; &amp;quot;${BACKUP_TIMEOUT_SEC}&amp;quot;&lt;br /&gt;
res=$?&lt;br /&gt;
&lt;br /&gt;
if [ ${res} -eq 0 ]; then&lt;br /&gt;
send_message_telegram &amp;quot;[Успешно]\nРезервное копирование информационной базы '${REF}' выполнено успешно&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
send_message_telegram &amp;quot;[Ошибка]\nРезервное копирование информационной базы '${REF}' не выполнено&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&lt;br /&gt;
===Ставим задачу для планировщика cron===&lt;br /&gt;
&lt;br /&gt;
Под пользователем&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
в терминале открываем временный файл для настройки crontab&lt;br /&gt;
&lt;br /&gt;
 EDITOR=nano crontab -e&lt;br /&gt;
&lt;br /&gt;
в результате редактором&lt;br /&gt;
&lt;br /&gt;
 nano&lt;br /&gt;
&lt;br /&gt;
будет открыт временный файл для установки параметров планировщика для текущего пользователя. Отредактировав и сохранив (Ctrl+O - Enter) изменения в этом файле и закрыв редактор (Ctrl+X) будет сконфигурирован планировщик для текущего пользователя.&lt;br /&gt;
&lt;br /&gt;
Проверить корректность заданных параметров планировщика можно выполнением команды&lt;br /&gt;
&lt;br /&gt;
 crontab -l&lt;br /&gt;
&lt;br /&gt;
В случае, если планировщик был сконфигурирован на запуск скрипта резервного копирования каждые сутки с 23:01, вывод команды проверки должен быть примерно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#minute (0-59),&lt;br /&gt;
#|	hour (0-23),&lt;br /&gt;
#|	|	day of the month (1-31),&lt;br /&gt;
#|	|	|	month of the year (1-12),&lt;br /&gt;
#|	|	|	|	day of the week (0-6 with 0=Sunday).&lt;br /&gt;
#|	|	|	|	|	commands&lt;br /&gt;
1       23	*	*	*	/opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11391</id>
		<title>1c</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11391"/>
		<updated>2026-06-13T09:09:55Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=В GNU/Linux=&lt;br /&gt;
&lt;br /&gt;
==Установка учебной платформы 8.5.x на ОС Альт Стартеркит p11 GNOME==&lt;br /&gt;
&lt;br /&gt;
===Обновить ОС и ядро===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get update -y &amp;amp;&amp;amp; apt-get dist-upgrade -y &amp;amp;&amp;amp; update-kernel -y&lt;br /&gt;
&lt;br /&gt;
===Поставить пакеты===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get install -f alt-tour evince firefox libwebkit2gtk 1c-preinstall-full libglui&lt;br /&gt;
&lt;br /&gt;
===Включить sudo su===&lt;br /&gt;
&lt;br /&gt;
Раскоментировать в файле:&lt;br /&gt;
&lt;br /&gt;
 /etc/sudoers&lt;br /&gt;
&lt;br /&gt;
строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
или строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) NOPASSWD: ALL&lt;br /&gt;
&lt;br /&gt;
(если необходимо выполнять sudo su без пароля)&lt;br /&gt;
&lt;br /&gt;
===Установить платформу===&lt;br /&gt;
&lt;br /&gt;
Предполагается, что есть файл установки платформы:&lt;br /&gt;
&lt;br /&gt;
 setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Тогда установка осуществляетс следующим образом:&lt;br /&gt;
&lt;br /&gt;
 chmod +x setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
 sudo ./setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Далее следуем инструкциям установщика. В установщике необходимо выбрать пункты &amp;quot;Установить ярлыки&amp;quot; и &amp;quot;Зависимости&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Установщик сам переключится в режим текстового интерфейса, если не найдёт дисплей (например, при установке по ssh). А вообще он имеет графический интерфейс...&lt;br /&gt;
&lt;br /&gt;
===Починить запуск платформы (актуально для ОС Альт веток p10 и p11 как минимум)===&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Получилось? Если да, то странно... Должна быть такая ошибка:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libicuuc.so.74)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjxl.so.0.11)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_12.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_13.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
&lt;br /&gt;
Не такая ошибка? Если да, то вы точно все пункты до этого выполнили (точно пакеты все установлены, которые выше в команде установки пакетовв перечислены)?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если ошибка такая, то чиним:&lt;br /&gt;
&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить ещё раз:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Всё должно работать. Теперь можно запускать платформу посредством ярлыков (кнопок меню приложений)&lt;br /&gt;
&lt;br /&gt;
По прежнему не запускается? Если да, то спешим на встречу новым приключениям!&lt;br /&gt;
&lt;br /&gt;
===Переопределить настройки по умолчанию для ОС Альт===&lt;br /&gt;
&lt;br /&gt;
====Каталог для файловых баз данных платформы 1С и sgid-bit====&lt;br /&gt;
&lt;br /&gt;
Поскольку полный путь до каталога с файловой базой данных будет фигурировать в конфигурационных файлах веб-сервера, его рекомендуется сделать отличным от пути по умолчанию, который предлагает платформа 1С (потому что в пути по умолчанию могут быть пробелы и кириллица).&lt;br /&gt;
&lt;br /&gt;
Например, так:&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/bases&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При публикации базы данных через веб-сервер необходимо чтобы у процесса веб-сервера, запущенного от пользователя&lt;br /&gt;
&lt;br /&gt;
 apache2&lt;br /&gt;
&lt;br /&gt;
был доступ на чтение и запись в каталог с базой данных конфигурации 1С.&lt;br /&gt;
&lt;br /&gt;
Один из вариантов это сделать следующий:&lt;br /&gt;
&lt;br /&gt;
1. Разрешаем членам группы-владельца каталога чтение и запись&lt;br /&gt;
&lt;br /&gt;
 sudo chmod g+rwx /home/user/bases -R&lt;br /&gt;
&lt;br /&gt;
2. Устанавливаем sgid бит на каталог&lt;br /&gt;
&lt;br /&gt;
 sudo chmod g+s /home/user/bases -R&lt;br /&gt;
&lt;br /&gt;
3. Добавляем пользователя apache2 в группу-владельца каталога&lt;br /&gt;
&lt;br /&gt;
 sudo usermod -aG user apache2&lt;br /&gt;
&lt;br /&gt;
==Публикация REST/Odata на веб-сервере==&lt;br /&gt;
&lt;br /&gt;
Предполагается что до этого были выполнены все действия в предыдущем разделе...&lt;br /&gt;
&lt;br /&gt;
===Устанавливаем и включаем веб-сервер apache2===&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install -y apache2&lt;br /&gt;
 sudo systemctl enable --now httpd2&lt;br /&gt;
&lt;br /&gt;
===Создаём симлинк для httpd2===&lt;br /&gt;
&lt;br /&gt;
Для скриптов платформы 1С это важно...&lt;br /&gt;
&lt;br /&gt;
 sudo ln -s /sbin/httpd2 /sbin/httpd&lt;br /&gt;
&lt;br /&gt;
===Публикуем командой===&lt;br /&gt;
&lt;br /&gt;
Сначала создаём файл (оно само не может):&lt;br /&gt;
&lt;br /&gt;
 sudo touch /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
Потом публикуем:&lt;br /&gt;
&lt;br /&gt;
 sudo HOME=/home/user /opt/1cv8t/x86_64/8.5.1.1150/webinstt -apache24 -wsdir odata_base -dir /var/www/odata_base -connstr &amp;quot;File=/home/user/bases/base1;&amp;quot; -confPath /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
В ответ должно прийти что-то типа этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация выполнена&lt;br /&gt;
&lt;br /&gt;
или этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация обновлена&lt;br /&gt;
&lt;br /&gt;
Примерное содержимое файла в контексте конфигурационных файлов веб-сервера apache2:&lt;br /&gt;
&lt;br /&gt;
 cat /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LoadModule _1cws_module &amp;quot;/opt/1cv8t/x86_64/8.5.1.1150/wsap24t.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 1c publication&lt;br /&gt;
Alias &amp;quot;/odata_base&amp;quot; &amp;quot;/var/www/odata_base/&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/odata_base/&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride All&lt;br /&gt;
    Options None&lt;br /&gt;
    Require all granted&lt;br /&gt;
    SetHandler 1c-application&lt;br /&gt;
    ManagedApplicationDescriptor &amp;quot;/var/www/odata_base/default.vrd&amp;quot;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Исправляем группу-владельца на файл ===&lt;br /&gt;
&lt;br /&gt;
По каким-то причинам после выполнения публикации утилитой webinstt файл:&lt;br /&gt;
&lt;br /&gt;
 /var/www/odata_base/default.vrd&lt;br /&gt;
&lt;br /&gt;
имеет группу-владельца:&lt;br /&gt;
&lt;br /&gt;
 apache&lt;br /&gt;
&lt;br /&gt;
(привет разработчикам платформы 1С, ориентирующимся, поди, на Ubuntu, а не на ОС из реестра минцифры)...&lt;br /&gt;
&lt;br /&gt;
Исправляем:&lt;br /&gt;
&lt;br /&gt;
 sudo chgrp apache2 /var/www/odata_base/default.vrd&lt;br /&gt;
&lt;br /&gt;
===Исправляем параметр в конфигурации сервиса===&lt;br /&gt;
&lt;br /&gt;
Исправляем значение параметра:&lt;br /&gt;
&lt;br /&gt;
 sudo sed -i 's/ProtectHome=yes/ProtectHome=no/g' /lib/systemd/system/httpd2.service&lt;br /&gt;
&lt;br /&gt;
После этого перезагрузим демона systemd и сервис httpd2&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
 sudo systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
Перед редактированием конфигурации необходимо передать права на папку публикации самому веб-серверу. По умолчанию она может быть закрыта для него. Если этого не сделать, веб-сервер не сможет прочитать файл настроек default.vrd и вернет ошибку доступа при обращении к базе через браузер.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R apache2: /var/www/odata_base&lt;br /&gt;
chmod -R 755 /var/www/odata_base&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Домашние каталоги пользователей (например, /home/user/) по умолчанию полностью изолированы от системных служб. Чтобы веб-сервер apache2 смог добраться до папки с базой данных, ему нужно дать разрешение на «транзитный проход» сквозь вышестоящие директории. Флаг +x для папок как раз открывает эту возможность, не нарушая при этом приватность остальных личных файлов пользователя.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chmod a+x /home/user/&lt;br /&gt;
sudo chmod a+x /home/user/bases/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перед конфигурацией OData необходимо также предоставить веб-серверу права на чтение и запись внутри папки с самой базой. Чтобы не нарушать логику прав Linux и оставить пользователя владельцем файлов, мы добавляем apache2 в его группу и выставляем права 775 совместно с флагом SGID. Это позволит платформе беспрепятственно создавать файлы блокировок (.1CL), а новые файлы будут автоматически наследоваться группой.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chmod -R 2775 /home/user/bases/base1/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Перезапускаем веб-сервер===&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
===Проверяем публикацию===&lt;br /&gt;
Идём браузером по адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако данная веб-страница возвращает внутреннюю ошибку платформы 1С. По всей видимости, в текущем режиме совместимости конфигурации графический модуль для отображения данного стандартного окна не генерируется веб-сервером (отсутствуют необходимые JS-скрипты для рендеринга интерфейса).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&amp;quot;#exception&amp;quot;:&amp;quot;{http://v8.1c.ru/8.2/virtual-resource-system}Exception&amp;quot;,&amp;quot;exception&amp;quot;:{&amp;quot;clsid&amp;quot;:&amp;quot;580392e6-ba49-4280-ac67-fcd6f2180121&amp;quot;,&amp;quot;reason&amp;quot;:404,&amp;quot;descr&amp;quot;:&amp;quot;HTTP: Not found\nError executing the query GET to resource /en/scripts/mod_bootstrap_bootstrap.js:&amp;quot;,&amp;quot;category&amp;quot;:&amp;quot;00000000000000000000000000&amp;quot;,&amp;quot;creationStack&amp;quot;:&amp;quot;mngsrvt:0x0000000000252DF5 mngsrvt:0x000000000024F8F4 vrsbaset:0x00000000006D7791 vrsbaset:0x00000000006540C5 vrsbaset:0x00000000006EBDE6 vrsbaset:0x00000000006D2A9C vrsbaset:0x00000000006EC4A9 vrsbaset:0x00000000006ED4A0 core85t:0x00000000008D4EBF core85t:0x00000000006B238C libc.so:0x0000000000000000 libc.so:0x0000000000000000 &amp;quot;}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ещё один привет разработчикам платформы 1С, по всей видимости, совсем не ориентирующимся на ОС на базе GNU/Linux, раз в учебной версии под GNU/Linux с веб-интерфейсом что-то не так).&lt;br /&gt;
&lt;br /&gt;
НО!&lt;br /&gt;
&lt;br /&gt;
Это не помешает нам работать с OData REST!&lt;br /&gt;
&lt;br /&gt;
===Включение поддержки OData===&lt;br /&gt;
&lt;br /&gt;
Любым текстовым редактором открываем конфигурационный файл публикации:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /var/www/odata_base/default.vrd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Внутри тега &amp;lt;standardOdata&amp;gt; меняем значение параметра enable с false на true:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итоговый вид файла default.vrd:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;point xmlns=&amp;quot;http://v8.1c.ru/8.2/virtual-resource-system&amp;quot;&lt;br /&gt;
                xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
                xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
                base=&amp;quot;/odata_base&amp;quot;&lt;br /&gt;
                ib=&amp;quot;File=/home/user/bases/base1;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ws pointEnableCommon=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        reuseSessions=&amp;quot;autouse&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;20&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;10&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;analytics enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;1200&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;500&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/point&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В блоке&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        reuseSessions=&amp;quot;autouse&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;20&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;10&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
увеличьте значение параметра&lt;br /&gt;
&lt;br /&gt;
 sessionMaxAge&lt;br /&gt;
&lt;br /&gt;
до&lt;br /&gt;
&lt;br /&gt;
 1200&lt;br /&gt;
&lt;br /&gt;
чтобы доступ к REST на учебной версии платформы не блокировался (при нескольких запросах с малым значением параметра sessionMaxAge платформа будет создавать более одной сессии, а учебная версия предусматривает только одну сессию!).&lt;br /&gt;
&lt;br /&gt;
После изменения конфигурации перезапускаем службу веб-сервера для применения настроек:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart httpd2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки доступности интерфейса OData отправляем GET-запрос по адресу:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/odata/standard.odata?$format=json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример успешного ответа (корневой контейнер для пустой информационной базы):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;service xml:base=&amp;quot;http://localhost/odata_base/odata/standard.odata&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;workspace&amp;gt;&lt;br /&gt;
&amp;lt;atom:title&amp;gt;Default&amp;lt;/atom:title&amp;gt;&lt;br /&gt;
&amp;lt;/workspace&amp;gt;&lt;br /&gt;
&amp;lt;/service&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Внесение объектов в OData===&lt;br /&gt;
&lt;br /&gt;
Поскольку в учебной версии платформы состав метаданных, доступных через автоматический REST-сервис, изначально пуст, нам необходимо программно указать платформе, какие именно объекты нужно отдавать наружу. Для этого мы создадим и выполним специальную внешнюю обработку.&lt;br /&gt;
&lt;br /&gt;
====Шаг 1. Создание внешней обработки====&lt;br /&gt;
Запустите Конфигуратор 1С, выберите в главном меню '''Файл''' -&amp;gt; '''Новый...''' и в открывшемся списке выберите '''Внешняя обработка'''.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-1.png|thumb|center|900px|Создание новой внешней обработки в Конфигураторе]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-2.png|thumb|center|900px|Выбор типа создаваемого документа]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 2. Настройка свойств и создание формы====&lt;br /&gt;
В открывшемся окне свойств новой обработки выполните следующие действия:&lt;br /&gt;
# '''Имя''': Задайте понятное имя (например, `НастройкаOData`).&lt;br /&gt;
# '''Создание формы''': Перейдите на вкладку '''Формы''' и нажмите на кнопку «Добавить», чтобы создать основную форму обработки. На этой форме мы разместим кнопку и пропишем логику внесения объектов в OData.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-3.png|thumb|center|900px|Настройка имени обработки и инициализация создания формы]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 3. Добавление команды и программного кода====&lt;br /&gt;
В редакторе формы перейдите на вкладку '''Команды''' (в правой части экрана) и добавьте новую команду формы, задав ей имя (например, `ВыполнитьНастройку`). &lt;br /&gt;
&lt;br /&gt;
Перетащите созданную команду мышкой в левую верхнюю часть окна — в структуру элементов формы, чтобы она превратилась в физическую кнопку. &lt;br /&gt;
&lt;br /&gt;
После этого нажмите правой кнопкой мыши по кнопке в левой части, выберите пункт '''Действие команды''' и в выпадающем меню выберите вариант: '''Создать на клиенте и процедуру на сервере без контекста'''.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-4.png|thumb|center|900px|Проектирование интерфейса формы и привязка клиент-серверного действия к кнопке]]&lt;br /&gt;
&lt;br /&gt;
В модуле формы замените сгенерированные шаблоны процедур следующим кодом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;НаКлиенте&lt;br /&gt;
Процедура ВыполнитьНастройку(Команда)&lt;br /&gt;
    ВыполнитьНастройкуНаСервере();&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
&lt;br /&gt;
&amp;amp;НаСервереБезКонтекста&lt;br /&gt;
Процедура ВыполнитьНастройкуНаСервере()&lt;br /&gt;
    // 1. Создаем массив для объектов, которые пойдут в веб-сервис&lt;br /&gt;
    МассивОбъектов = Новый Массив;&lt;br /&gt;
    &lt;br /&gt;
    // 2. Добавляем в массив необходимый справочник (например, Сотрудники)&lt;br /&gt;
    МассивОбъектов.Добавить(Метаданные.Справочники.Сотрудники);&lt;br /&gt;
    &lt;br /&gt;
    // 3. Передаем этот массив платформе для регистрации в OData&lt;br /&gt;
    УстановитьСоставСтандартногоИнтерфейсаOData(МассивОбъектов);&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Шаг 4. Сохранение обработки====&lt;br /&gt;
Закройте окна редактора формы и программного модуля. Вернувшись в основное окно создания внешней обработки, нажмите кнопку '''Закрыть'''. Платформа автоматически предложит сохранить изменения — выберите удобный каталог на диске и сохраните файл обработки (с расширением `.epf`).&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-5.png|thumb|center|900px|Процесс сохранения внешней обработки на диск]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 5. Запуск обработки в режиме предприятия====&lt;br /&gt;
Запустите 1С:Предприятие. В главном меню выберите '''Файл''' -&amp;gt; '''Открыть...''', найдите сохраненную ранее внешнюю обработку и откройте её. Если система безопасности выдаст предупреждение о потенциальной опасности подключаемого модуля, согласитесь с рисками и подтвердите открытие.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-6.png|thumb|center|900px|Открытие файла внешней обработки через пользовательский интерфейс 1С]]&lt;br /&gt;
&lt;br /&gt;
====Шаг 6. Инициализация OData====&lt;br /&gt;
На экране появится созданная нами форма. Нажмите на ней кнопку '''Выполнить настройку'''. В этот момент отработает заложенная нами серверная логика, и состав стандартного интерфейса OData обновится. После этого обработку и само приложение 1С можно закрывать.&lt;br /&gt;
&lt;br /&gt;
[[Файл:1c-7.png|thumb|center|900px|Финальное выполнение логики обработки по нажатию кнопки]]&lt;br /&gt;
&lt;br /&gt;
==Автоматизация резервного копирования информационных баз==&lt;br /&gt;
&lt;br /&gt;
Предполагается, что платформа &amp;quot;1С Предприятие&amp;quot; работает на GNU/Linux системе и скрипт резервного копирования выполняется от пользователя&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
, графическое окружение которого автоматически запускается после загрузки компьютера.&lt;br /&gt;
&lt;br /&gt;
Дело в том, что по каким-то причинам, разработчики платформы &amp;quot;1С Предприятие&amp;quot; не заложили в систему запуск резервного копирования в headless-режиме, поэтому платформе необходим дисплей X-сервера.&lt;br /&gt;
&lt;br /&gt;
Также предполагается, что файл с паролем от пользователя платформы &amp;quot;1С Предприятие&amp;quot;, которому разрешено выполнять резервное копирование, хранится в файле&lt;br /&gt;
&lt;br /&gt;
 /home/administrator/.1c-cluster-infobases-backup.pass&lt;br /&gt;
&lt;br /&gt;
и рекомендуемые права на этот файл&lt;br /&gt;
&lt;br /&gt;
 0400&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Подготовка каталога для скриптов===&lt;br /&gt;
&lt;br /&gt;
 mkdir /opt/1c_backup_scripts&lt;br /&gt;
&lt;br /&gt;
===Базовый скрипт===&lt;br /&gt;
&lt;br /&gt;
При необходимости, в тексте скрипта, отредактируйте строчку&lt;br /&gt;
&lt;br /&gt;
 bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
, указав путь до конкретной версии платформы &amp;quot;1С Предприятие&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже предоставлен текст, который можно выделить, скопировать в текстовый редактор, при необходимости поправить, затем весь этот текст можно бросить в консоль для создания файла посредством heredoc-синтаксиса:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup_infobase_1c_generic.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export LANG=ru_RU.UTF-8&lt;br /&gt;
&lt;br /&gt;
NON_ROOT_USER=&amp;quot;administrator&amp;quot;&lt;br /&gt;
DISPLAY=&amp;quot;:0&amp;quot;&lt;br /&gt;
STORAGE=&amp;quot;${1}&amp;quot;&lt;br /&gt;
SRV=&amp;quot;${2}&amp;quot;&lt;br /&gt;
REF=&amp;quot;${3}&amp;quot;&lt;br /&gt;
LOGIN=&amp;quot;${4}&amp;quot;&lt;br /&gt;
PASSWORD_FILE=&amp;quot;${5}&amp;quot;&lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;${6}&amp;quot;&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;${7}&amp;quot;&lt;br /&gt;
TIMEOUT_COUNTER=0&lt;br /&gt;
LOCK_FILE_PATH=&amp;quot;/home/usr1cv8/.1cv8/1C/1cv8/reg_1541/snccntx8e79a393-c2af-4fd7-b25a-af6b5ed19bfa/snccntx.dat&amp;quot;&lt;br /&gt;
#-----------------------------&lt;br /&gt;
export DISPLAY=&amp;quot;${DISPLAY}&amp;quot;&lt;br /&gt;
bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
PASSWORD=`cat ${PASSWORD_FILE} | head -1`&lt;br /&gt;
infobase_suffix=&amp;quot;$(date +%Y-%m-%d-%H-%M-%S).dt&amp;quot;&lt;br /&gt;
TMP_STORAGE=&amp;quot;/opt/1c_backup_scripts/tmp_storage&amp;quot;&lt;br /&gt;
ib_tmp_filepath=&amp;quot;${TMP_STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_tmp_log=&amp;quot;${ib_tmp_filepath}.log&amp;quot;&lt;br /&gt;
ib_filepath=&amp;quot;${STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_log=&amp;quot;${ib_filepath}.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function rotate_backups(){&lt;br /&gt;
filenames_cmd=&amp;quot;${STORAGE}/${REF}*&amp;quot;&lt;br /&gt;
current_unixtime=`date +%s --date=&amp;quot;$(date +%Y-%m-%d) 00:00:00&amp;quot;`&lt;br /&gt;
test_unixtime=$(($current_unixtime-$KEEP_BACKUPS_FOR_LAST_DAYS*60*60*24))&lt;br /&gt;
&lt;br /&gt;
for f in $(/bin/ls $filenames_cmd); do&lt;br /&gt;
#echo &amp;quot;f=$f&amp;quot;&lt;br /&gt;
datetime_from_file=`echo ${f} | awk -F '__' {'print $2'} | awk -F '.' {'print $1'}`&lt;br /&gt;
#echo &amp;quot;datetime_from_file=${datetime_from_file}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#2023-12-24-22-01-02&lt;br /&gt;
Y=`echo ${datetime_from_file} | awk -F '-' {'print $1'}`&lt;br /&gt;
M=`echo ${datetime_from_file} | awk -F '-' {'print $2'}`&lt;br /&gt;
D=`echo ${datetime_from_file} | awk -F '-' {'print $3'}`&lt;br /&gt;
h=`echo ${datetime_from_file} | awk -F '-' {'print $4'}`&lt;br /&gt;
m=`echo ${datetime_from_file} | awk -F '-' {'print $5'}`&lt;br /&gt;
s=`echo ${datetime_from_file} | awk -F '-' {'print $6'}`&lt;br /&gt;
&lt;br /&gt;
unixtime_from_file=`date +%s --date=&amp;quot;${Y}-${M}-${D} ${h}:${m}:${s}&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
if [[ $unixtime_from_file -lt $test_unixtime ]]; then&lt;br /&gt;
  echo &amp;quot;delete file: ${f}&amp;quot;&lt;br /&gt;
  /bin/rm ${f}&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;keep file: ${f}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function wait(){&lt;br /&gt;
&lt;br /&gt;
  if [[ $TIMEOUT_COUNTER -ge $BACKUP_TIMEOUT_SEC ]]; then&lt;br /&gt;
    kill -9 ${1}&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  if [ ! -d /proc/${1}/ ]; then&lt;br /&gt;
    nice_text=&amp;quot;Выгрузка информационной базы успешно завершена&amp;quot;&lt;br /&gt;
    res_text=$(grep -o -i &amp;quot;${nice_text}&amp;quot; ${ib_tmp_log})&lt;br /&gt;
&lt;br /&gt;
    # start apache2&lt;br /&gt;
    sudo systemctl start httpd2&lt;br /&gt;
&lt;br /&gt;
    if [ &amp;quot;${res_text}&amp;quot; = &amp;quot;${nice_text}&amp;quot; ]; then&lt;br /&gt;
      /bin/cp ${ib_tmp_filepath} ${ib_filepath} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_filepath}&lt;br /&gt;
      /bin/cp ${ib_tmp_log} ${ib_log} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_log}&lt;br /&gt;
      #echo &amp;quot;TEST: ${ib_filepath} AND ${ib_log}&amp;quot;&lt;br /&gt;
      rotate_backups&lt;br /&gt;
      exit 0&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    exit 1&lt;br /&gt;
  fi&lt;br /&gt;
  #echo &amp;quot;pid alive: ${1}&amp;quot;&lt;br /&gt;
  sleep 1&lt;br /&gt;
  TIMEOUT_COUNTER=$(($TIMEOUT_COUNTER+1))&lt;br /&gt;
  wait ${1}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# prepare tmp storage&lt;br /&gt;
[ ! -d ${TMP_STORAGE} ] &amp;amp;&amp;amp; sudo mkdir &amp;quot;${TMP_STORAGE}&amp;quot; &amp;amp;&amp;amp; sudo chown administrator: &amp;quot;${TMP_STORAGE}&amp;quot; -R&lt;br /&gt;
&lt;br /&gt;
# stop apache2&lt;br /&gt;
sudo systemctl stop httpd2&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
# reset srv1cv8 sessions&lt;br /&gt;
sudo systemctl stop srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
sudo /bin/rm -f &amp;quot;${LOCK_FILE_PATH}&amp;quot;&lt;br /&gt;
sudo systemctl start srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
DISPLAY=:0 XAUTHORITY=/home/administrator/.Xauthority ${bin1c} CONFIG /N &amp;quot;${LOGIN}&amp;quot; /P &amp;quot;${PASSWORD}&amp;quot; /S &amp;quot;${SRV}/${REF}&amp;quot; /DumpIB &amp;quot;${ib_tmp_filepath}&amp;quot; /OUT &amp;quot;${ib_tmp_log}&amp;quot; &amp;amp;&lt;br /&gt;
main_process_pid=$!&lt;br /&gt;
&lt;br /&gt;
wait ${main_process_pid}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup_infobase_1c_generic.sh&lt;br /&gt;
&lt;br /&gt;
===Скрипт для резервирования конкретной базы данных===&lt;br /&gt;
Данный скрипт представляет из себя обёртку над выше приведённым скриптом, с заданием конкретных параметров резервирования&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup__my_super_infobase.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
### PARAMETERS ###&lt;br /&gt;
STORAGE=&amp;quot;/mnt/storage/my-1c-host-backups&amp;quot; # каталог для сохранения резервных копий&lt;br /&gt;
SRV=&amp;quot;my-1c-host&amp;quot;                          # хост, на котором работает платформа &amp;quot;1С: Предприятие&amp;quot;&lt;br /&gt;
REF=&amp;quot;my_super_infobase&amp;quot;                   # имя базы данных, которую резервируем&lt;br /&gt;
LOGIN=&amp;quot;backupuser&amp;quot;                        # 1с-пользователь, которому разрешено резервировать базу данных&lt;br /&gt;
PASSWORD_FILE=&amp;quot;/home/administrator/.1c-cluster-infobases-backup.pass&amp;quot; # в этом файле должен находиться только пароль от 1с-пользоателя &lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;2&amp;quot;            # сохранить резервные копии только за эти несколько последных дней (в текущем примере - за 2 последних дня)&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;300&amp;quot;                  # таймаут, в течение которого разрешено работать процессу резервирования (процессу платформы &amp;quot;1С: Предприятие&amp;quot;. Если за этот таймаут процесс не успел сделать резервную копию, то он снимается с выполнения)&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### BOT PARAMETERS&lt;br /&gt;
TELEGRAM_BOT_TOKEN=&amp;quot;&amp;quot;             # сюда нужно вписать токен телеграм-бота, который будет отсылать уведомления&lt;br /&gt;
TELEGRAM_DESTINATION_GROUP_ID=&amp;quot;&amp;quot;  # сюда нужно вписать идентификатор телеграм-пользователя или телеграм-группы (не забывайте про минус в начале, если это идентификатор группы), в которого (или в которую, если это группа) бот будет писать сообщения&lt;br /&gt;
&lt;br /&gt;
function send_message_telegram(){&lt;br /&gt;
#exit 0  # раскомментируйте эту строчку, если отсылка сообщений телеграм-ботом не нужна (следовательно, и параметры дя бота при этом можно не задавать)&lt;br /&gt;
message=${1}&lt;br /&gt;
curl -s -X POST \&lt;br /&gt;
     -H 'Content-Type: application/json' \&lt;br /&gt;
     -d &amp;quot;{\&amp;quot;chat_id\&amp;quot;: \&amp;quot;${TELEGRAM_DESTINATION_GROUP_ID}\&amp;quot;, \&amp;quot;text\&amp;quot;: \&amp;quot;${message}\&amp;quot;, \&amp;quot;disable_notification\&amp;quot;: true}&amp;quot; \&lt;br /&gt;
     https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage &amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### START ###&lt;br /&gt;
BASE=`dirname ${0}`&lt;br /&gt;
${BASE}/backup_infobase_1c_generic.sh &amp;quot;${STORAGE}&amp;quot; &amp;quot;${SRV}&amp;quot; &amp;quot;${REF}&amp;quot; &amp;quot;${LOGIN}&amp;quot; &amp;quot;${PASSWORD_FILE}&amp;quot; &amp;quot;${KEEP_BACKUPS_FOR_LAST_DAYS}&amp;quot; &amp;quot;${BACKUP_TIMEOUT_SEC}&amp;quot;&lt;br /&gt;
res=$?&lt;br /&gt;
&lt;br /&gt;
if [ ${res} -eq 0 ]; then&lt;br /&gt;
send_message_telegram &amp;quot;[Успешно]\nРезервное копирование информационной базы '${REF}' выполнено успешно&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
send_message_telegram &amp;quot;[Ошибка]\nРезервное копирование информационной базы '${REF}' не выполнено&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&lt;br /&gt;
===Ставим задачу для планировщика cron===&lt;br /&gt;
&lt;br /&gt;
Под пользователем&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
в терминале открываем временный файл для настройки crontab&lt;br /&gt;
&lt;br /&gt;
 EDITOR=nano crontab -e&lt;br /&gt;
&lt;br /&gt;
в результате редактором&lt;br /&gt;
&lt;br /&gt;
 nano&lt;br /&gt;
&lt;br /&gt;
будет открыт временный файл для установки параметров планировщика для текущего пользователя. Отредактировав и сохранив (Ctrl+O - Enter) изменения в этом файле и закрыв редактор (Ctrl+X) будет сконфигурирован планировщик для текущего пользователя.&lt;br /&gt;
&lt;br /&gt;
Проверить корректность заданных параметров планировщика можно выполнением команды&lt;br /&gt;
&lt;br /&gt;
 crontab -l&lt;br /&gt;
&lt;br /&gt;
В случае, если планировщик был сконфигурирован на запуск скрипта резервного копирования каждые сутки с 23:01, вывод команды проверки должен быть примерно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#minute (0-59),&lt;br /&gt;
#|	hour (0-23),&lt;br /&gt;
#|	|	day of the month (1-31),&lt;br /&gt;
#|	|	|	month of the year (1-12),&lt;br /&gt;
#|	|	|	|	day of the week (0-6 with 0=Sunday).&lt;br /&gt;
#|	|	|	|	|	commands&lt;br /&gt;
1       23	*	*	*	/opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1c-7.png&amp;diff=11390</id>
		<title>Файл:1c-7.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1c-7.png&amp;diff=11390"/>
		<updated>2026-06-13T08:52:41Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1c-6.png&amp;diff=11389</id>
		<title>Файл:1c-6.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1c-6.png&amp;diff=11389"/>
		<updated>2026-06-13T08:52:28Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1c-5.png&amp;diff=11388</id>
		<title>Файл:1c-5.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1c-5.png&amp;diff=11388"/>
		<updated>2026-06-13T08:52:08Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1c-4.png&amp;diff=11387</id>
		<title>Файл:1c-4.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1c-4.png&amp;diff=11387"/>
		<updated>2026-06-13T08:51:50Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1c-3.png&amp;diff=11386</id>
		<title>Файл:1c-3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1c-3.png&amp;diff=11386"/>
		<updated>2026-06-13T08:51:26Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1c-2.png&amp;diff=11385</id>
		<title>Файл:1c-2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1c-2.png&amp;diff=11385"/>
		<updated>2026-06-13T08:50:11Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1c-1.png&amp;diff=11384</id>
		<title>Файл:1c-1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1c-1.png&amp;diff=11384"/>
		<updated>2026-06-13T08:46:05Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11366</id>
		<title>1c</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11366"/>
		<updated>2026-06-13T06:15:46Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: /* Исправляем параметр в конфигурации сервиса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=В GNU/Linux=&lt;br /&gt;
&lt;br /&gt;
==Установка учебной платформы 8.5.x на ОС Альт Стартеркит p11 GNOME==&lt;br /&gt;
&lt;br /&gt;
===Обновить ОС и ядро===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get update -y &amp;amp;&amp;amp; apt-get dist-upgrade -y &amp;amp;&amp;amp; update-kernel -y&lt;br /&gt;
&lt;br /&gt;
===Поставить пакеты===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get install -f alt-tour firefox libwebkit2gtk 1c-preinstall-full libglui&lt;br /&gt;
&lt;br /&gt;
===Включить sudo su===&lt;br /&gt;
&lt;br /&gt;
Раскоментировать в файле:&lt;br /&gt;
&lt;br /&gt;
 /etc/sudoers&lt;br /&gt;
&lt;br /&gt;
строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
или строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) NOPASSWD: ALL&lt;br /&gt;
&lt;br /&gt;
(если необходимо выполнять sudo su без пароля)&lt;br /&gt;
&lt;br /&gt;
===Установить платформу===&lt;br /&gt;
&lt;br /&gt;
Предполагается, что есть файл установки платформы:&lt;br /&gt;
&lt;br /&gt;
 setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Тогда установка осуществляетс следующим образом:&lt;br /&gt;
&lt;br /&gt;
 chmod +x setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
 sudo ./setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Далее следуем инструкциям установщика. В установщике необходимо выбрать пункт &amp;quot;Установить ярлыки&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Установщик сам переключится в режим текстового интерфейса, если не найдёт дисплей (например, при установке по ssh). А вообще он имеет графический интерфейс...&lt;br /&gt;
&lt;br /&gt;
===Починить запуск платформы (актуально для ОС Альт веток p10 и p11 как минимум)===&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Получилось? Если да, то странно... Должна быть такая ошибка:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libicuuc.so.74)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjxl.so.0.11)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_12.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_13.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
&lt;br /&gt;
Не такая ошибка? Если да, то вы точно все пункты до этого выполнили (точно пакеты все установлены, которые выше в команде установки пакетовв перечислены)?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если ошибка такая, то чиним:&lt;br /&gt;
&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить ещё раз:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Всё должно работать. Теперь можно запускать платформу посредством ярлыков (кнопок меню приложений)&lt;br /&gt;
&lt;br /&gt;
По прежнему не запускается? Если да, то спешим на встречу новым приключениям!&lt;br /&gt;
&lt;br /&gt;
===Переопределить настройки по умолчанию для ОС Альт===&lt;br /&gt;
&lt;br /&gt;
Перезагрузиться&lt;br /&gt;
&lt;br /&gt;
====Каталог для файловых баз данных платформы 1С и sgid-bit====&lt;br /&gt;
&lt;br /&gt;
Поскольку полный путь до каталога с файловой базой данных будет фигурировать в конфигурационных файлах веб-сервера, его рекомендуется сделать отличным от пути по умолчанию, который предлагает платформа 1С.&lt;br /&gt;
&lt;br /&gt;
Например, так:&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/bases&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При публикации базы данных через веб-сервер необходимо чтобы у процесса веб-сервера, запущенного от пользователя&lt;br /&gt;
&lt;br /&gt;
 apache2&lt;br /&gt;
&lt;br /&gt;
был доступ на чтение и запись в каталог с базой данных конфигурации 1С.&lt;br /&gt;
&lt;br /&gt;
Один из вариантов это сделать следующий:&lt;br /&gt;
&lt;br /&gt;
1. Разрешаем членам группы-владельца каталога чтение и запись&lt;br /&gt;
&lt;br /&gt;
 chmod g+rwx ~/bases -R&lt;br /&gt;
&lt;br /&gt;
2. Устанавливаем sgid бит на каталог&lt;br /&gt;
&lt;br /&gt;
 chmod g+s ~/bases -R&lt;br /&gt;
&lt;br /&gt;
3. Добавляем пользователя apache2 в группу-владельца каталога&lt;br /&gt;
&lt;br /&gt;
 sudo usermod -aG user apache2&lt;br /&gt;
&lt;br /&gt;
==Публикация REST/Odata на веб-сервере==&lt;br /&gt;
&lt;br /&gt;
Предполагается что до этого были выполнены все действия в предыдущем разделе...&lt;br /&gt;
&lt;br /&gt;
===Устанавливаем и включаем веб-сервер apache2===&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install -y apache2&lt;br /&gt;
 sudo systemctl enable --now httpd2&lt;br /&gt;
&lt;br /&gt;
===Создаём симлинк для httpd2===&lt;br /&gt;
&lt;br /&gt;
Для скриптов платформы 1С это важно...&lt;br /&gt;
&lt;br /&gt;
 ln -s /sbin/httpd2 /sbin/httpd&lt;br /&gt;
&lt;br /&gt;
===Публикуем командой===&lt;br /&gt;
&lt;br /&gt;
Сначала создаём файл (оно само не может):&lt;br /&gt;
&lt;br /&gt;
 sudo touch /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
Потом публикуем:&lt;br /&gt;
&lt;br /&gt;
 sudo HOME=/home/user /opt/1cv8t/x86_64/8.5.1.1150/webinstt -apache24 -wsdir odata_base -dir /var/www/odata_base -connstr &amp;quot;File=/home/user/bases/base1;&amp;quot; -confPath /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
В ответ должно прийти что-то типа этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация выполнена&lt;br /&gt;
&lt;br /&gt;
или этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация обновлена&lt;br /&gt;
&lt;br /&gt;
Примерное содержимое файла в контексте конфигурационных файлов веб-сервера apache2:&lt;br /&gt;
&lt;br /&gt;
 cat /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LoadModule _1cws_module &amp;quot;/opt/1cv8t/x86_64/8.5.1.1150/wsap24t.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 1c publication&lt;br /&gt;
Alias &amp;quot;/odata_base&amp;quot; &amp;quot;/var/www/odata_base/&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/odata_base/&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride All&lt;br /&gt;
    Options None&lt;br /&gt;
    Require all granted&lt;br /&gt;
    SetHandler 1c-application&lt;br /&gt;
    ManagedApplicationDescriptor &amp;quot;/var/www/odata_base/default.vrd&amp;quot;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Исправляем параметр в конфигурации сервиса===&lt;br /&gt;
&lt;br /&gt;
Исправляем значение параметра:&lt;br /&gt;
&lt;br /&gt;
 sed -i 's/ProtectHome=yes/ProtectHome=no/g' /lib/systemd/system/httpd2.service&lt;br /&gt;
&lt;br /&gt;
После этого перезагрузим демона systemd&lt;br /&gt;
&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
Перед редактированием конфигурации необходимо передать права на папку публикации самому веб-серверу. По умолчанию она может быть закрыта для него. Если этого не сделать, веб-сервер не сможет прочитать файл настроек default.vrd и вернет ошибку доступа при обращении к базе через браузер.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R apache2: /var/www/odata_base&lt;br /&gt;
chmod -R 755 /var/www/odata_base&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Домашние каталоги пользователей (например, /home/user/) по умолчанию полностью изолированы от системных служб. Чтобы веб-сервер apache2 смог добраться до папки с базой данных, ему нужно дать разрешение на «транзитный проход» сквозь вышестоящие директории. Флаг +x для папок как раз открывает эту возможность, не нарушая при этом приватность остальных личных файлов пользователя.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod a+x /home/user/&lt;br /&gt;
chmod a+x /home/user/bases/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перед конфигурацией OData необходимо также предоставить веб-серверу права на чтение и запись внутри папки с самой базой. Чтобы не нарушать логику прав Linux и оставить пользователя владельцем файлов, мы добавляем apache2 в его группу и выставляем права 775 совместно с флагом SGID. Это позволит платформе беспрепятственно создавать файлы блокировок (.1CL), а новые файлы будут автоматически наследоваться группой.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod -R 2775 /home/user/bases/base1/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Перезапускаем веб-сервер===&lt;br /&gt;
&lt;br /&gt;
 systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
===Проверяем публикацию===&lt;br /&gt;
Идём браузером по адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако данная веб-страница возвращает внутреннюю ошибку платформы 1С. По всей видимости, в текущем режиме совместимости конфигурации графический модуль для отображения данного стандартного окна не генерируется веб-сервером (отсутствуют необходимые JS-скрипты для рендеринга интерфейса).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&amp;quot;#exception&amp;quot;:&amp;quot;{http://v8.1c.ru/8.2/virtual-resource-system}Exception&amp;quot;,&amp;quot;exception&amp;quot;:{&amp;quot;clsid&amp;quot;:&amp;quot;580392e6-ba49-4280-ac67-fcd6f2180121&amp;quot;,&amp;quot;reason&amp;quot;:404,&amp;quot;descr&amp;quot;:&amp;quot;HTTP: Not found\nError executing the query GET to resource /en/scripts/mod_bootstrap_bootstrap.js:&amp;quot;,&amp;quot;category&amp;quot;:&amp;quot;00000000000000000000000000&amp;quot;,&amp;quot;creationStack&amp;quot;:&amp;quot;mngsrvt:0x0000000000252DF5 mngsrvt:0x000000000024F8F4 vrsbaset:0x00000000006D7791 vrsbaset:0x00000000006540C5 vrsbaset:0x00000000006EBDE6 vrsbaset:0x00000000006D2A9C vrsbaset:0x00000000006EC4A9 vrsbaset:0x00000000006ED4A0 core85t:0x00000000008D4EBF core85t:0x00000000006B238C libc.so:0x0000000000000000 libc.so:0x0000000000000000 &amp;quot;}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Но это не помешает нам работать с OData.&lt;br /&gt;
&lt;br /&gt;
===Включение поддержки OData===&lt;br /&gt;
&lt;br /&gt;
Любым текстовым редактором открываем конфигурационный файл публикации:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /var/www/odata_base/default.vrd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Внутри тега &amp;lt;standardOdata&amp;gt; меняем значение параметра enable с false на true:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итоговый вид файла default.vrd:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;point xmlns=&amp;quot;http://v8.1c.ru/8.2/virtual-resource-system&amp;quot;&lt;br /&gt;
                xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
                xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
                base=&amp;quot;/odata_base&amp;quot;&lt;br /&gt;
                ib=&amp;quot;File=/home/user/bases/base1;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ws pointEnableCommon=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        reuseSessions=&amp;quot;autouse&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;20&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;10&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;analytics enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;1200&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;500&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/point&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После изменения конфигурации перезапускаем службу веб-сервера для применения настроек:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart httpd2.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки доступности интерфейса OData отправляем GET-запрос по адресу:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/odata/standard.odata/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример успешного ответа (корневой контейнер для пустой информационной базы):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;service xml:base=&amp;quot;http://localhost/odata_base/odata/standard.odata&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;workspace&amp;gt;&lt;br /&gt;
&amp;lt;atom:title&amp;gt;Default&amp;lt;/atom:title&amp;gt;&lt;br /&gt;
&amp;lt;/workspace&amp;gt;&lt;br /&gt;
&amp;lt;/service&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Автоматизация резервного копирования информационных баз==&lt;br /&gt;
&lt;br /&gt;
Предполагается, что платформа &amp;quot;1С Предприятие&amp;quot; работает на GNU/Linux системе и скрипт резервного копирования выполняется от пользователя&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
, графическое окружение которого автоматически запускается после загрузки компьютера.&lt;br /&gt;
&lt;br /&gt;
Дело в том, что по каким-то причинам, разработчики платформы &amp;quot;1С Предприятие&amp;quot; не заложили в систему запуск резервного копирования в headless-режиме, поэтому платформе необходим дисплей X-сервера.&lt;br /&gt;
&lt;br /&gt;
Также предполагается, что файл с паролем от пользователя платформы &amp;quot;1С Предприятие&amp;quot;, которому разрешено выполнять резервное копирование, хранится в файле&lt;br /&gt;
&lt;br /&gt;
 /home/administrator/.1c-cluster-infobases-backup.pass&lt;br /&gt;
&lt;br /&gt;
и рекомендуемые права на этот файл&lt;br /&gt;
&lt;br /&gt;
 0400&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Подготовка каталога для скриптов===&lt;br /&gt;
&lt;br /&gt;
 mkdir /opt/1c_backup_scripts&lt;br /&gt;
&lt;br /&gt;
===Базовый скрипт===&lt;br /&gt;
&lt;br /&gt;
При необходимости, в тексте скрипта, отредактируйте строчку&lt;br /&gt;
&lt;br /&gt;
 bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
, указав путь до конкретной версии платформы &amp;quot;1С Предприятие&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже предоставлен текст, который можно выделить, скопировать в текстовый редактор, при необходимости поправить, затем весь этот текст можно бросить в консоль для создания файла посредством heredoc-синтаксиса:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup_infobase_1c_generic.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export LANG=ru_RU.UTF-8&lt;br /&gt;
&lt;br /&gt;
NON_ROOT_USER=&amp;quot;administrator&amp;quot;&lt;br /&gt;
DISPLAY=&amp;quot;:0&amp;quot;&lt;br /&gt;
STORAGE=&amp;quot;${1}&amp;quot;&lt;br /&gt;
SRV=&amp;quot;${2}&amp;quot;&lt;br /&gt;
REF=&amp;quot;${3}&amp;quot;&lt;br /&gt;
LOGIN=&amp;quot;${4}&amp;quot;&lt;br /&gt;
PASSWORD_FILE=&amp;quot;${5}&amp;quot;&lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;${6}&amp;quot;&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;${7}&amp;quot;&lt;br /&gt;
TIMEOUT_COUNTER=0&lt;br /&gt;
LOCK_FILE_PATH=&amp;quot;/home/usr1cv8/.1cv8/1C/1cv8/reg_1541/snccntx8e79a393-c2af-4fd7-b25a-af6b5ed19bfa/snccntx.dat&amp;quot;&lt;br /&gt;
#-----------------------------&lt;br /&gt;
export DISPLAY=&amp;quot;${DISPLAY}&amp;quot;&lt;br /&gt;
bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
PASSWORD=`cat ${PASSWORD_FILE} | head -1`&lt;br /&gt;
infobase_suffix=&amp;quot;$(date +%Y-%m-%d-%H-%M-%S).dt&amp;quot;&lt;br /&gt;
TMP_STORAGE=&amp;quot;/opt/1c_backup_scripts/tmp_storage&amp;quot;&lt;br /&gt;
ib_tmp_filepath=&amp;quot;${TMP_STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_tmp_log=&amp;quot;${ib_tmp_filepath}.log&amp;quot;&lt;br /&gt;
ib_filepath=&amp;quot;${STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_log=&amp;quot;${ib_filepath}.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function rotate_backups(){&lt;br /&gt;
filenames_cmd=&amp;quot;${STORAGE}/${REF}*&amp;quot;&lt;br /&gt;
current_unixtime=`date +%s --date=&amp;quot;$(date +%Y-%m-%d) 00:00:00&amp;quot;`&lt;br /&gt;
test_unixtime=$(($current_unixtime-$KEEP_BACKUPS_FOR_LAST_DAYS*60*60*24))&lt;br /&gt;
&lt;br /&gt;
for f in $(/bin/ls $filenames_cmd); do&lt;br /&gt;
#echo &amp;quot;f=$f&amp;quot;&lt;br /&gt;
datetime_from_file=`echo ${f} | awk -F '__' {'print $2'} | awk -F '.' {'print $1'}`&lt;br /&gt;
#echo &amp;quot;datetime_from_file=${datetime_from_file}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#2023-12-24-22-01-02&lt;br /&gt;
Y=`echo ${datetime_from_file} | awk -F '-' {'print $1'}`&lt;br /&gt;
M=`echo ${datetime_from_file} | awk -F '-' {'print $2'}`&lt;br /&gt;
D=`echo ${datetime_from_file} | awk -F '-' {'print $3'}`&lt;br /&gt;
h=`echo ${datetime_from_file} | awk -F '-' {'print $4'}`&lt;br /&gt;
m=`echo ${datetime_from_file} | awk -F '-' {'print $5'}`&lt;br /&gt;
s=`echo ${datetime_from_file} | awk -F '-' {'print $6'}`&lt;br /&gt;
&lt;br /&gt;
unixtime_from_file=`date +%s --date=&amp;quot;${Y}-${M}-${D} ${h}:${m}:${s}&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
if [[ $unixtime_from_file -lt $test_unixtime ]]; then&lt;br /&gt;
  echo &amp;quot;delete file: ${f}&amp;quot;&lt;br /&gt;
  /bin/rm ${f}&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;keep file: ${f}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function wait(){&lt;br /&gt;
&lt;br /&gt;
  if [[ $TIMEOUT_COUNTER -ge $BACKUP_TIMEOUT_SEC ]]; then&lt;br /&gt;
    kill -9 ${1}&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  if [ ! -d /proc/${1}/ ]; then&lt;br /&gt;
    nice_text=&amp;quot;Выгрузка информационной базы успешно завершена&amp;quot;&lt;br /&gt;
    res_text=$(grep -o -i &amp;quot;${nice_text}&amp;quot; ${ib_tmp_log})&lt;br /&gt;
&lt;br /&gt;
    # start apache2&lt;br /&gt;
    sudo systemctl start httpd2&lt;br /&gt;
&lt;br /&gt;
    if [ &amp;quot;${res_text}&amp;quot; = &amp;quot;${nice_text}&amp;quot; ]; then&lt;br /&gt;
      /bin/cp ${ib_tmp_filepath} ${ib_filepath} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_filepath}&lt;br /&gt;
      /bin/cp ${ib_tmp_log} ${ib_log} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_log}&lt;br /&gt;
      #echo &amp;quot;TEST: ${ib_filepath} AND ${ib_log}&amp;quot;&lt;br /&gt;
      rotate_backups&lt;br /&gt;
      exit 0&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    exit 1&lt;br /&gt;
  fi&lt;br /&gt;
  #echo &amp;quot;pid alive: ${1}&amp;quot;&lt;br /&gt;
  sleep 1&lt;br /&gt;
  TIMEOUT_COUNTER=$(($TIMEOUT_COUNTER+1))&lt;br /&gt;
  wait ${1}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# prepare tmp storage&lt;br /&gt;
[ ! -d ${TMP_STORAGE} ] &amp;amp;&amp;amp; sudo mkdir &amp;quot;${TMP_STORAGE}&amp;quot; &amp;amp;&amp;amp; sudo chown administrator: &amp;quot;${TMP_STORAGE}&amp;quot; -R&lt;br /&gt;
&lt;br /&gt;
# stop apache2&lt;br /&gt;
sudo systemctl stop httpd2&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
# reset srv1cv8 sessions&lt;br /&gt;
sudo systemctl stop srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
sudo /bin/rm -f &amp;quot;${LOCK_FILE_PATH}&amp;quot;&lt;br /&gt;
sudo systemctl start srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
DISPLAY=:0 XAUTHORITY=/home/administrator/.Xauthority ${bin1c} CONFIG /N &amp;quot;${LOGIN}&amp;quot; /P &amp;quot;${PASSWORD}&amp;quot; /S &amp;quot;${SRV}/${REF}&amp;quot; /DumpIB &amp;quot;${ib_tmp_filepath}&amp;quot; /OUT &amp;quot;${ib_tmp_log}&amp;quot; &amp;amp;&lt;br /&gt;
main_process_pid=$!&lt;br /&gt;
&lt;br /&gt;
wait ${main_process_pid}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup_infobase_1c_generic.sh&lt;br /&gt;
&lt;br /&gt;
===Скрипт для резервирования конкретной базы данных===&lt;br /&gt;
Данный скрипт представляет из себя обёртку над выше приведённым скриптом, с заданием конкретных параметров резервирования&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup__my_super_infobase.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
### PARAMETERS ###&lt;br /&gt;
STORAGE=&amp;quot;/mnt/storage/my-1c-host-backups&amp;quot; # каталог для сохранения резервных копий&lt;br /&gt;
SRV=&amp;quot;my-1c-host&amp;quot;                          # хост, на котором работает платформа &amp;quot;1С: Предприятие&amp;quot;&lt;br /&gt;
REF=&amp;quot;my_super_infobase&amp;quot;                   # имя базы данных, которую резервируем&lt;br /&gt;
LOGIN=&amp;quot;backupuser&amp;quot;                        # 1с-пользователь, которому разрешено резервировать базу данных&lt;br /&gt;
PASSWORD_FILE=&amp;quot;/home/administrator/.1c-cluster-infobases-backup.pass&amp;quot; # в этом файле должен находиться только пароль от 1с-пользоателя &lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;2&amp;quot;            # сохранить резервные копии только за эти несколько последных дней (в текущем примере - за 2 последних дня)&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;300&amp;quot;                  # таймаут, в течение которого разрешено работать процессу резервирования (процессу платформы &amp;quot;1С: Предприятие&amp;quot;. Если за этот таймаут процесс не успел сделать резервную копию, то он снимается с выполнения)&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### BOT PARAMETERS&lt;br /&gt;
TELEGRAM_BOT_TOKEN=&amp;quot;&amp;quot;             # сюда нужно вписать токен телеграм-бота, который будет отсылать уведомления&lt;br /&gt;
TELEGRAM_DESTINATION_GROUP_ID=&amp;quot;&amp;quot;  # сюда нужно вписать идентификатор телеграм-пользователя или телеграм-группы (не забывайте про минус в начале, если это идентификатор группы), в которого (или в которую, если это группа) бот будет писать сообщения&lt;br /&gt;
&lt;br /&gt;
function send_message_telegram(){&lt;br /&gt;
#exit 0  # раскомментируйте эту строчку, если отсылка сообщений телеграм-ботом не нужна (следовательно, и параметры дя бота при этом можно не задавать)&lt;br /&gt;
message=${1}&lt;br /&gt;
curl -s -X POST \&lt;br /&gt;
     -H 'Content-Type: application/json' \&lt;br /&gt;
     -d &amp;quot;{\&amp;quot;chat_id\&amp;quot;: \&amp;quot;${TELEGRAM_DESTINATION_GROUP_ID}\&amp;quot;, \&amp;quot;text\&amp;quot;: \&amp;quot;${message}\&amp;quot;, \&amp;quot;disable_notification\&amp;quot;: true}&amp;quot; \&lt;br /&gt;
     https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage &amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### START ###&lt;br /&gt;
BASE=`dirname ${0}`&lt;br /&gt;
${BASE}/backup_infobase_1c_generic.sh &amp;quot;${STORAGE}&amp;quot; &amp;quot;${SRV}&amp;quot; &amp;quot;${REF}&amp;quot; &amp;quot;${LOGIN}&amp;quot; &amp;quot;${PASSWORD_FILE}&amp;quot; &amp;quot;${KEEP_BACKUPS_FOR_LAST_DAYS}&amp;quot; &amp;quot;${BACKUP_TIMEOUT_SEC}&amp;quot;&lt;br /&gt;
res=$?&lt;br /&gt;
&lt;br /&gt;
if [ ${res} -eq 0 ]; then&lt;br /&gt;
send_message_telegram &amp;quot;[Успешно]\nРезервное копирование информационной базы '${REF}' выполнено успешно&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
send_message_telegram &amp;quot;[Ошибка]\nРезервное копирование информационной базы '${REF}' не выполнено&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&lt;br /&gt;
===Ставим задачу для планировщика cron===&lt;br /&gt;
&lt;br /&gt;
Под пользователем&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
в терминале открываем временный файл для настройки crontab&lt;br /&gt;
&lt;br /&gt;
 EDITOR=nano crontab -e&lt;br /&gt;
&lt;br /&gt;
в результате редактором&lt;br /&gt;
&lt;br /&gt;
 nano&lt;br /&gt;
&lt;br /&gt;
будет открыт временный файл для установки параметров планировщика для текущего пользователя. Отредактировав и сохранив (Ctrl+O - Enter) изменения в этом файле и закрыв редактор (Ctrl+X) будет сконфигурирован планировщик для текущего пользователя.&lt;br /&gt;
&lt;br /&gt;
Проверить корректность заданных параметров планировщика можно выполнением команды&lt;br /&gt;
&lt;br /&gt;
 crontab -l&lt;br /&gt;
&lt;br /&gt;
В случае, если планировщик был сконфигурирован на запуск скрипта резервного копирования каждые сутки с 23:01, вывод команды проверки должен быть примерно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#minute (0-59),&lt;br /&gt;
#|	hour (0-23),&lt;br /&gt;
#|	|	day of the month (1-31),&lt;br /&gt;
#|	|	|	month of the year (1-12),&lt;br /&gt;
#|	|	|	|	day of the week (0-6 with 0=Sunday).&lt;br /&gt;
#|	|	|	|	|	commands&lt;br /&gt;
1       23	*	*	*	/opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11365</id>
		<title>1c</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11365"/>
		<updated>2026-06-12T22:07:08Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: /* Исправляем параметр в конфигурации сервиса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=В GNU/Linux=&lt;br /&gt;
&lt;br /&gt;
==Установка учебной платформы 8.5.x на ОС Альт Стартеркит p11 GNOME==&lt;br /&gt;
&lt;br /&gt;
===Обновить ОС и ядро===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get update -y &amp;amp;&amp;amp; apt-get dist-upgrade -y &amp;amp;&amp;amp; update-kernel -y&lt;br /&gt;
&lt;br /&gt;
===Поставить пакеты===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get install -f alt-tour firefox libwebkit2gtk 1c-preinstall-full libglui&lt;br /&gt;
&lt;br /&gt;
===Включить sudo su===&lt;br /&gt;
&lt;br /&gt;
Раскоментировать в файле:&lt;br /&gt;
&lt;br /&gt;
 /etc/sudoers&lt;br /&gt;
&lt;br /&gt;
строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
или строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) NOPASSWD: ALL&lt;br /&gt;
&lt;br /&gt;
(если необходимо выполнять sudo su без пароля)&lt;br /&gt;
&lt;br /&gt;
===Установить платформу===&lt;br /&gt;
&lt;br /&gt;
Предполагается, что есть файл установки платформы:&lt;br /&gt;
&lt;br /&gt;
 setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Тогда установка осуществляетс следующим образом:&lt;br /&gt;
&lt;br /&gt;
 chmod +x setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
 sudo ./setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Далее следуем инструкциям установщика. В установщике необходимо выбрать пункт &amp;quot;Установить ярлыки&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Установщик сам переключится в режим текстового интерфейса, если не найдёт дисплей (например, при установке по ssh). А вообще он имеет графический интерфейс...&lt;br /&gt;
&lt;br /&gt;
===Починить запуск платформы (актуально для ОС Альт веток p10 и p11 как минимум)===&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Получилось? Если да, то странно... Должна быть такая ошибка:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libicuuc.so.74)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjxl.so.0.11)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_12.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_13.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
&lt;br /&gt;
Не такая ошибка? Если да, то вы точно все пункты до этого выполнили (точно пакеты все установлены, которые выше в команде установки пакетовв перечислены)?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если ошибка такая, то чиним:&lt;br /&gt;
&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить ещё раз:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Всё должно работать. Теперь можно запускать платформу посредством ярлыков (кнопок меню приложений)&lt;br /&gt;
&lt;br /&gt;
По прежнему не запускается? Если да, то спешим на встречу новым приключениям!&lt;br /&gt;
&lt;br /&gt;
===Переопределить настройки по умолчанию для ОС Альт===&lt;br /&gt;
&lt;br /&gt;
Перезагрузиться&lt;br /&gt;
&lt;br /&gt;
====Каталог для файловых баз данных платформы 1С и sgid-bit====&lt;br /&gt;
&lt;br /&gt;
Поскольку полный путь до каталога с файловой базой данных будет фигурировать в конфигурационных файлах веб-сервера, его рекомендуется сделать отличным от пути по умолчанию, который предлагает платформа 1С.&lt;br /&gt;
&lt;br /&gt;
Например, так:&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/bases&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При публикации базы данных через веб-сервер необходимо чтобы у процесса веб-сервера, запущенного от пользователя&lt;br /&gt;
&lt;br /&gt;
 apache2&lt;br /&gt;
&lt;br /&gt;
был доступ на чтение и запись в каталог с базой данных конфигурации 1С.&lt;br /&gt;
&lt;br /&gt;
Один из вариантов это сделать следующий:&lt;br /&gt;
&lt;br /&gt;
1. Разрешаем членам группы-владельца каталога чтение и запись&lt;br /&gt;
&lt;br /&gt;
 chmod g+rwx ~/bases -R&lt;br /&gt;
&lt;br /&gt;
2. Устанавливаем sgid бит на каталог&lt;br /&gt;
&lt;br /&gt;
 chmod g+s ~/bases -R&lt;br /&gt;
&lt;br /&gt;
3. Добавляем пользователя apache2 в группу-владельца каталога&lt;br /&gt;
&lt;br /&gt;
 sudo usermod -aG user apache2&lt;br /&gt;
&lt;br /&gt;
==Публикация REST/Odata на веб-сервере==&lt;br /&gt;
&lt;br /&gt;
Предполагается что до этого были выполнены все действия в предыдущем разделе...&lt;br /&gt;
&lt;br /&gt;
===Устанавливаем и включаем веб-сервер apache2===&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install -y apache2&lt;br /&gt;
 sudo systemctl enable --now httpd2&lt;br /&gt;
&lt;br /&gt;
===Создаём симлинк для httpd2===&lt;br /&gt;
&lt;br /&gt;
Для скриптов платформы 1С это важно...&lt;br /&gt;
&lt;br /&gt;
 ln -s /sbin/httpd2 /sbin/httpd&lt;br /&gt;
&lt;br /&gt;
===Публикуем командой===&lt;br /&gt;
&lt;br /&gt;
Сначала создаём файл (оно само не может):&lt;br /&gt;
&lt;br /&gt;
 sudo touch /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
Потом публикуем:&lt;br /&gt;
&lt;br /&gt;
 sudo HOME=/home/user /opt/1cv8t/x86_64/8.5.1.1150/webinstt -apache24 -wsdir odata_base -dir /var/www/odata_base -connstr &amp;quot;File=/home/user/bases/base1;&amp;quot; -confPath /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
В ответ должно прийти что-то типа этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация выполнена&lt;br /&gt;
&lt;br /&gt;
или этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация обновлена&lt;br /&gt;
&lt;br /&gt;
Примерное содержимое файла в контексте конфигурационных файлов веб-сервера apache2:&lt;br /&gt;
&lt;br /&gt;
 cat /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LoadModule _1cws_module &amp;quot;/opt/1cv8t/x86_64/8.5.1.1150/wsap24t.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 1c publication&lt;br /&gt;
Alias &amp;quot;/odata_base&amp;quot; &amp;quot;/var/www/odata_base/&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/odata_base/&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride All&lt;br /&gt;
    Options None&lt;br /&gt;
    Require all granted&lt;br /&gt;
    SetHandler 1c-application&lt;br /&gt;
    ManagedApplicationDescriptor &amp;quot;/var/www/odata_base/default.vrd&amp;quot;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Исправляем параметр в конфигурации сервиса===&lt;br /&gt;
&lt;br /&gt;
Исправляем значение параметра:&lt;br /&gt;
&lt;br /&gt;
 sed -i 's/ProtectHome=yes/ProtectHome=no/g' /lib/systemd/system/httpd2.service&lt;br /&gt;
&lt;br /&gt;
После этого перезагрузим демона systemd&lt;br /&gt;
&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
Перед редактированием конфигурации необходимо передать права на папку публикации самому веб-серверу. По умолчанию она может быть закрыта для него. Если этого не сделать, веб-сервер не сможет прочитать файл настроек default.vrd и вернет ошибку доступа при обращении к базе через браузер.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R apache2: /var/www/odata_base&lt;br /&gt;
chmod -R 755 /var/www/odata_base&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Домашние каталоги пользователей (например, /home/user/) по умолчанию полностью изолированы от системных служб. Чтобы веб-сервер apache2 смог добраться до папки с базой данных, ему нужно дать разрешение на «транзитный проход» сквозь вышестоящие директории. Флаг +x для папок как раз открывает эту возможность, не нарушая при этом приватность остальных личных файлов пользователя.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod a+x /home/user/&lt;br /&gt;
chmod a+x /home/user/bases/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Самому движку 1С, который запускается внутри веб-сервера, необходимы права на чтение и запись внутри папки с базой. Назначение пользователя apache2 владельцем каталога ИБ напрямую устраняет критическую ошибку загрузки компонентов (Permission denied), позволяя платформе беспрепятственно создавать файлы блокировок (.1CL)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R apache2:apache2 /home/user/bases/base1/&lt;br /&gt;
chmod -R 775 /home/user/bases/base1/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Перезапускаем веб-сервер===&lt;br /&gt;
&lt;br /&gt;
 systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
===Проверяем публикацию===&lt;br /&gt;
Идём браузером по адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако данная веб-страница возвращает внутреннюю ошибку платформы 1С. По всей видимости, в текущем режиме совместимости конфигурации графический модуль для отображения данного стандартного окна не генерируется веб-сервером (отсутствуют необходимые JS-скрипты для рендеринга интерфейса).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&amp;quot;#exception&amp;quot;:&amp;quot;{http://v8.1c.ru/8.2/virtual-resource-system}Exception&amp;quot;,&amp;quot;exception&amp;quot;:{&amp;quot;clsid&amp;quot;:&amp;quot;580392e6-ba49-4280-ac67-fcd6f2180121&amp;quot;,&amp;quot;reason&amp;quot;:404,&amp;quot;descr&amp;quot;:&amp;quot;HTTP: Not found\nError executing the query GET to resource /en/scripts/mod_bootstrap_bootstrap.js:&amp;quot;,&amp;quot;category&amp;quot;:&amp;quot;00000000000000000000000000&amp;quot;,&amp;quot;creationStack&amp;quot;:&amp;quot;mngsrvt:0x0000000000252DF5 mngsrvt:0x000000000024F8F4 vrsbaset:0x00000000006D7791 vrsbaset:0x00000000006540C5 vrsbaset:0x00000000006EBDE6 vrsbaset:0x00000000006D2A9C vrsbaset:0x00000000006EC4A9 vrsbaset:0x00000000006ED4A0 core85t:0x00000000008D4EBF core85t:0x00000000006B238C libc.so:0x0000000000000000 libc.so:0x0000000000000000 &amp;quot;}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Но это не помешает нам работать с OData.&lt;br /&gt;
&lt;br /&gt;
===Включение поддержки OData===&lt;br /&gt;
&lt;br /&gt;
Любым текстовым редактором открываем конфигурационный файл публикации:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /var/www/odata_base/default.vrd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Внутри тега &amp;lt;standardOdata&amp;gt; меняем значение параметра enable с false на true:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итоговый вид файла default.vrd:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;point xmlns=&amp;quot;http://v8.1c.ru/8.2/virtual-resource-system&amp;quot;&lt;br /&gt;
                xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
                xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
                base=&amp;quot;/odata_base&amp;quot;&lt;br /&gt;
                ib=&amp;quot;File=/home/user/bases/base1;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ws pointEnableCommon=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        reuseSessions=&amp;quot;autouse&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;20&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;10&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;analytics enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;1200&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;500&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/point&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После изменения конфигурации перезапускаем службу веб-сервера для применения настроек:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart httpd2.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки доступности интерфейса OData отправляем GET-запрос по адресу:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/odata/standard.odata/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример успешного ответа (корневой контейнер для пустой информационной базы):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;service xml:base=&amp;quot;http://localhost/odata_base/odata/standard.odata&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;workspace&amp;gt;&lt;br /&gt;
&amp;lt;atom:title&amp;gt;Default&amp;lt;/atom:title&amp;gt;&lt;br /&gt;
&amp;lt;/workspace&amp;gt;&lt;br /&gt;
&amp;lt;/service&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Автоматизация резервного копирования информационных баз==&lt;br /&gt;
&lt;br /&gt;
Предполагается, что платформа &amp;quot;1С Предприятие&amp;quot; работает на GNU/Linux системе и скрипт резервного копирования выполняется от пользователя&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
, графическое окружение которого автоматически запускается после загрузки компьютера.&lt;br /&gt;
&lt;br /&gt;
Дело в том, что по каким-то причинам, разработчики платформы &amp;quot;1С Предприятие&amp;quot; не заложили в систему запуск резервного копирования в headless-режиме, поэтому платформе необходим дисплей X-сервера.&lt;br /&gt;
&lt;br /&gt;
Также предполагается, что файл с паролем от пользователя платформы &amp;quot;1С Предприятие&amp;quot;, которому разрешено выполнять резервное копирование, хранится в файле&lt;br /&gt;
&lt;br /&gt;
 /home/administrator/.1c-cluster-infobases-backup.pass&lt;br /&gt;
&lt;br /&gt;
и рекомендуемые права на этот файл&lt;br /&gt;
&lt;br /&gt;
 0400&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Подготовка каталога для скриптов===&lt;br /&gt;
&lt;br /&gt;
 mkdir /opt/1c_backup_scripts&lt;br /&gt;
&lt;br /&gt;
===Базовый скрипт===&lt;br /&gt;
&lt;br /&gt;
При необходимости, в тексте скрипта, отредактируйте строчку&lt;br /&gt;
&lt;br /&gt;
 bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
, указав путь до конкретной версии платформы &amp;quot;1С Предприятие&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже предоставлен текст, который можно выделить, скопировать в текстовый редактор, при необходимости поправить, затем весь этот текст можно бросить в консоль для создания файла посредством heredoc-синтаксиса:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup_infobase_1c_generic.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export LANG=ru_RU.UTF-8&lt;br /&gt;
&lt;br /&gt;
NON_ROOT_USER=&amp;quot;administrator&amp;quot;&lt;br /&gt;
DISPLAY=&amp;quot;:0&amp;quot;&lt;br /&gt;
STORAGE=&amp;quot;${1}&amp;quot;&lt;br /&gt;
SRV=&amp;quot;${2}&amp;quot;&lt;br /&gt;
REF=&amp;quot;${3}&amp;quot;&lt;br /&gt;
LOGIN=&amp;quot;${4}&amp;quot;&lt;br /&gt;
PASSWORD_FILE=&amp;quot;${5}&amp;quot;&lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;${6}&amp;quot;&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;${7}&amp;quot;&lt;br /&gt;
TIMEOUT_COUNTER=0&lt;br /&gt;
LOCK_FILE_PATH=&amp;quot;/home/usr1cv8/.1cv8/1C/1cv8/reg_1541/snccntx8e79a393-c2af-4fd7-b25a-af6b5ed19bfa/snccntx.dat&amp;quot;&lt;br /&gt;
#-----------------------------&lt;br /&gt;
export DISPLAY=&amp;quot;${DISPLAY}&amp;quot;&lt;br /&gt;
bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
PASSWORD=`cat ${PASSWORD_FILE} | head -1`&lt;br /&gt;
infobase_suffix=&amp;quot;$(date +%Y-%m-%d-%H-%M-%S).dt&amp;quot;&lt;br /&gt;
TMP_STORAGE=&amp;quot;/opt/1c_backup_scripts/tmp_storage&amp;quot;&lt;br /&gt;
ib_tmp_filepath=&amp;quot;${TMP_STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_tmp_log=&amp;quot;${ib_tmp_filepath}.log&amp;quot;&lt;br /&gt;
ib_filepath=&amp;quot;${STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_log=&amp;quot;${ib_filepath}.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function rotate_backups(){&lt;br /&gt;
filenames_cmd=&amp;quot;${STORAGE}/${REF}*&amp;quot;&lt;br /&gt;
current_unixtime=`date +%s --date=&amp;quot;$(date +%Y-%m-%d) 00:00:00&amp;quot;`&lt;br /&gt;
test_unixtime=$(($current_unixtime-$KEEP_BACKUPS_FOR_LAST_DAYS*60*60*24))&lt;br /&gt;
&lt;br /&gt;
for f in $(/bin/ls $filenames_cmd); do&lt;br /&gt;
#echo &amp;quot;f=$f&amp;quot;&lt;br /&gt;
datetime_from_file=`echo ${f} | awk -F '__' {'print $2'} | awk -F '.' {'print $1'}`&lt;br /&gt;
#echo &amp;quot;datetime_from_file=${datetime_from_file}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#2023-12-24-22-01-02&lt;br /&gt;
Y=`echo ${datetime_from_file} | awk -F '-' {'print $1'}`&lt;br /&gt;
M=`echo ${datetime_from_file} | awk -F '-' {'print $2'}`&lt;br /&gt;
D=`echo ${datetime_from_file} | awk -F '-' {'print $3'}`&lt;br /&gt;
h=`echo ${datetime_from_file} | awk -F '-' {'print $4'}`&lt;br /&gt;
m=`echo ${datetime_from_file} | awk -F '-' {'print $5'}`&lt;br /&gt;
s=`echo ${datetime_from_file} | awk -F '-' {'print $6'}`&lt;br /&gt;
&lt;br /&gt;
unixtime_from_file=`date +%s --date=&amp;quot;${Y}-${M}-${D} ${h}:${m}:${s}&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
if [[ $unixtime_from_file -lt $test_unixtime ]]; then&lt;br /&gt;
  echo &amp;quot;delete file: ${f}&amp;quot;&lt;br /&gt;
  /bin/rm ${f}&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;keep file: ${f}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function wait(){&lt;br /&gt;
&lt;br /&gt;
  if [[ $TIMEOUT_COUNTER -ge $BACKUP_TIMEOUT_SEC ]]; then&lt;br /&gt;
    kill -9 ${1}&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  if [ ! -d /proc/${1}/ ]; then&lt;br /&gt;
    nice_text=&amp;quot;Выгрузка информационной базы успешно завершена&amp;quot;&lt;br /&gt;
    res_text=$(grep -o -i &amp;quot;${nice_text}&amp;quot; ${ib_tmp_log})&lt;br /&gt;
&lt;br /&gt;
    # start apache2&lt;br /&gt;
    sudo systemctl start httpd2&lt;br /&gt;
&lt;br /&gt;
    if [ &amp;quot;${res_text}&amp;quot; = &amp;quot;${nice_text}&amp;quot; ]; then&lt;br /&gt;
      /bin/cp ${ib_tmp_filepath} ${ib_filepath} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_filepath}&lt;br /&gt;
      /bin/cp ${ib_tmp_log} ${ib_log} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_log}&lt;br /&gt;
      #echo &amp;quot;TEST: ${ib_filepath} AND ${ib_log}&amp;quot;&lt;br /&gt;
      rotate_backups&lt;br /&gt;
      exit 0&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    exit 1&lt;br /&gt;
  fi&lt;br /&gt;
  #echo &amp;quot;pid alive: ${1}&amp;quot;&lt;br /&gt;
  sleep 1&lt;br /&gt;
  TIMEOUT_COUNTER=$(($TIMEOUT_COUNTER+1))&lt;br /&gt;
  wait ${1}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# prepare tmp storage&lt;br /&gt;
[ ! -d ${TMP_STORAGE} ] &amp;amp;&amp;amp; sudo mkdir &amp;quot;${TMP_STORAGE}&amp;quot; &amp;amp;&amp;amp; sudo chown administrator: &amp;quot;${TMP_STORAGE}&amp;quot; -R&lt;br /&gt;
&lt;br /&gt;
# stop apache2&lt;br /&gt;
sudo systemctl stop httpd2&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
# reset srv1cv8 sessions&lt;br /&gt;
sudo systemctl stop srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
sudo /bin/rm -f &amp;quot;${LOCK_FILE_PATH}&amp;quot;&lt;br /&gt;
sudo systemctl start srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
DISPLAY=:0 XAUTHORITY=/home/administrator/.Xauthority ${bin1c} CONFIG /N &amp;quot;${LOGIN}&amp;quot; /P &amp;quot;${PASSWORD}&amp;quot; /S &amp;quot;${SRV}/${REF}&amp;quot; /DumpIB &amp;quot;${ib_tmp_filepath}&amp;quot; /OUT &amp;quot;${ib_tmp_log}&amp;quot; &amp;amp;&lt;br /&gt;
main_process_pid=$!&lt;br /&gt;
&lt;br /&gt;
wait ${main_process_pid}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup_infobase_1c_generic.sh&lt;br /&gt;
&lt;br /&gt;
===Скрипт для резервирования конкретной базы данных===&lt;br /&gt;
Данный скрипт представляет из себя обёртку над выше приведённым скриптом, с заданием конкретных параметров резервирования&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup__my_super_infobase.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
### PARAMETERS ###&lt;br /&gt;
STORAGE=&amp;quot;/mnt/storage/my-1c-host-backups&amp;quot; # каталог для сохранения резервных копий&lt;br /&gt;
SRV=&amp;quot;my-1c-host&amp;quot;                          # хост, на котором работает платформа &amp;quot;1С: Предприятие&amp;quot;&lt;br /&gt;
REF=&amp;quot;my_super_infobase&amp;quot;                   # имя базы данных, которую резервируем&lt;br /&gt;
LOGIN=&amp;quot;backupuser&amp;quot;                        # 1с-пользователь, которому разрешено резервировать базу данных&lt;br /&gt;
PASSWORD_FILE=&amp;quot;/home/administrator/.1c-cluster-infobases-backup.pass&amp;quot; # в этом файле должен находиться только пароль от 1с-пользоателя &lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;2&amp;quot;            # сохранить резервные копии только за эти несколько последных дней (в текущем примере - за 2 последних дня)&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;300&amp;quot;                  # таймаут, в течение которого разрешено работать процессу резервирования (процессу платформы &amp;quot;1С: Предприятие&amp;quot;. Если за этот таймаут процесс не успел сделать резервную копию, то он снимается с выполнения)&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### BOT PARAMETERS&lt;br /&gt;
TELEGRAM_BOT_TOKEN=&amp;quot;&amp;quot;             # сюда нужно вписать токен телеграм-бота, который будет отсылать уведомления&lt;br /&gt;
TELEGRAM_DESTINATION_GROUP_ID=&amp;quot;&amp;quot;  # сюда нужно вписать идентификатор телеграм-пользователя или телеграм-группы (не забывайте про минус в начале, если это идентификатор группы), в которого (или в которую, если это группа) бот будет писать сообщения&lt;br /&gt;
&lt;br /&gt;
function send_message_telegram(){&lt;br /&gt;
#exit 0  # раскомментируйте эту строчку, если отсылка сообщений телеграм-ботом не нужна (следовательно, и параметры дя бота при этом можно не задавать)&lt;br /&gt;
message=${1}&lt;br /&gt;
curl -s -X POST \&lt;br /&gt;
     -H 'Content-Type: application/json' \&lt;br /&gt;
     -d &amp;quot;{\&amp;quot;chat_id\&amp;quot;: \&amp;quot;${TELEGRAM_DESTINATION_GROUP_ID}\&amp;quot;, \&amp;quot;text\&amp;quot;: \&amp;quot;${message}\&amp;quot;, \&amp;quot;disable_notification\&amp;quot;: true}&amp;quot; \&lt;br /&gt;
     https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage &amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### START ###&lt;br /&gt;
BASE=`dirname ${0}`&lt;br /&gt;
${BASE}/backup_infobase_1c_generic.sh &amp;quot;${STORAGE}&amp;quot; &amp;quot;${SRV}&amp;quot; &amp;quot;${REF}&amp;quot; &amp;quot;${LOGIN}&amp;quot; &amp;quot;${PASSWORD_FILE}&amp;quot; &amp;quot;${KEEP_BACKUPS_FOR_LAST_DAYS}&amp;quot; &amp;quot;${BACKUP_TIMEOUT_SEC}&amp;quot;&lt;br /&gt;
res=$?&lt;br /&gt;
&lt;br /&gt;
if [ ${res} -eq 0 ]; then&lt;br /&gt;
send_message_telegram &amp;quot;[Успешно]\nРезервное копирование информационной базы '${REF}' выполнено успешно&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
send_message_telegram &amp;quot;[Ошибка]\nРезервное копирование информационной базы '${REF}' не выполнено&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&lt;br /&gt;
===Ставим задачу для планировщика cron===&lt;br /&gt;
&lt;br /&gt;
Под пользователем&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
в терминале открываем временный файл для настройки crontab&lt;br /&gt;
&lt;br /&gt;
 EDITOR=nano crontab -e&lt;br /&gt;
&lt;br /&gt;
в результате редактором&lt;br /&gt;
&lt;br /&gt;
 nano&lt;br /&gt;
&lt;br /&gt;
будет открыт временный файл для установки параметров планировщика для текущего пользователя. Отредактировав и сохранив (Ctrl+O - Enter) изменения в этом файле и закрыв редактор (Ctrl+X) будет сконфигурирован планировщик для текущего пользователя.&lt;br /&gt;
&lt;br /&gt;
Проверить корректность заданных параметров планировщика можно выполнением команды&lt;br /&gt;
&lt;br /&gt;
 crontab -l&lt;br /&gt;
&lt;br /&gt;
В случае, если планировщик был сконфигурирован на запуск скрипта резервного копирования каждые сутки с 23:01, вывод команды проверки должен быть примерно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#minute (0-59),&lt;br /&gt;
#|	hour (0-23),&lt;br /&gt;
#|	|	day of the month (1-31),&lt;br /&gt;
#|	|	|	month of the year (1-12),&lt;br /&gt;
#|	|	|	|	day of the week (0-6 with 0=Sunday).&lt;br /&gt;
#|	|	|	|	|	commands&lt;br /&gt;
1       23	*	*	*	/opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11364</id>
		<title>1c</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11364"/>
		<updated>2026-06-12T22:00:14Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=В GNU/Linux=&lt;br /&gt;
&lt;br /&gt;
==Установка учебной платформы 8.5.x на ОС Альт Стартеркит p11 GNOME==&lt;br /&gt;
&lt;br /&gt;
===Обновить ОС и ядро===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get update -y &amp;amp;&amp;amp; apt-get dist-upgrade -y &amp;amp;&amp;amp; update-kernel -y&lt;br /&gt;
&lt;br /&gt;
===Поставить пакеты===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get install -f alt-tour firefox libwebkit2gtk 1c-preinstall-full libglui&lt;br /&gt;
&lt;br /&gt;
===Включить sudo su===&lt;br /&gt;
&lt;br /&gt;
Раскоментировать в файле:&lt;br /&gt;
&lt;br /&gt;
 /etc/sudoers&lt;br /&gt;
&lt;br /&gt;
строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
или строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) NOPASSWD: ALL&lt;br /&gt;
&lt;br /&gt;
(если необходимо выполнять sudo su без пароля)&lt;br /&gt;
&lt;br /&gt;
===Установить платформу===&lt;br /&gt;
&lt;br /&gt;
Предполагается, что есть файл установки платформы:&lt;br /&gt;
&lt;br /&gt;
 setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Тогда установка осуществляетс следующим образом:&lt;br /&gt;
&lt;br /&gt;
 chmod +x setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
 sudo ./setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Далее следуем инструкциям установщика. В установщике необходимо выбрать пункт &amp;quot;Установить ярлыки&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Установщик сам переключится в режим текстового интерфейса, если не найдёт дисплей (например, при установке по ssh). А вообще он имеет графический интерфейс...&lt;br /&gt;
&lt;br /&gt;
===Починить запуск платформы (актуально для ОС Альт веток p10 и p11 как минимум)===&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Получилось? Если да, то странно... Должна быть такая ошибка:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libicuuc.so.74)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjxl.so.0.11)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_12.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_13.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
&lt;br /&gt;
Не такая ошибка? Если да, то вы точно все пункты до этого выполнили (точно пакеты все установлены, которые выше в команде установки пакетовв перечислены)?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если ошибка такая, то чиним:&lt;br /&gt;
&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить ещё раз:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Всё должно работать. Теперь можно запускать платформу посредством ярлыков (кнопок меню приложений)&lt;br /&gt;
&lt;br /&gt;
По прежнему не запускается? Если да, то спешим на встречу новым приключениям!&lt;br /&gt;
&lt;br /&gt;
===Переопределить настройки по умолчанию для ОС Альт===&lt;br /&gt;
&lt;br /&gt;
Перезагрузиться&lt;br /&gt;
&lt;br /&gt;
====Каталог для файловых баз данных платформы 1С и sgid-bit====&lt;br /&gt;
&lt;br /&gt;
Поскольку полный путь до каталога с файловой базой данных будет фигурировать в конфигурационных файлах веб-сервера, его рекомендуется сделать отличным от пути по умолчанию, который предлагает платформа 1С.&lt;br /&gt;
&lt;br /&gt;
Например, так:&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/bases&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При публикации базы данных через веб-сервер необходимо чтобы у процесса веб-сервера, запущенного от пользователя&lt;br /&gt;
&lt;br /&gt;
 apache2&lt;br /&gt;
&lt;br /&gt;
был доступ на чтение и запись в каталог с базой данных конфигурации 1С.&lt;br /&gt;
&lt;br /&gt;
Один из вариантов это сделать следующий:&lt;br /&gt;
&lt;br /&gt;
1. Разрешаем членам группы-владельца каталога чтение и запись&lt;br /&gt;
&lt;br /&gt;
 chmod g+rwx ~/bases -R&lt;br /&gt;
&lt;br /&gt;
2. Устанавливаем sgid бит на каталог&lt;br /&gt;
&lt;br /&gt;
 chmod g+s ~/bases -R&lt;br /&gt;
&lt;br /&gt;
3. Добавляем пользователя apache2 в группу-владельца каталога&lt;br /&gt;
&lt;br /&gt;
 sudo usermod -aG user apache2&lt;br /&gt;
&lt;br /&gt;
==Публикация REST/Odata на веб-сервере==&lt;br /&gt;
&lt;br /&gt;
Предполагается что до этого были выполнены все действия в предыдущем разделе...&lt;br /&gt;
&lt;br /&gt;
===Устанавливаем и включаем веб-сервер apache2===&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install -y apache2&lt;br /&gt;
 sudo systemctl enable --now httpd2&lt;br /&gt;
&lt;br /&gt;
===Создаём симлинк для httpd2===&lt;br /&gt;
&lt;br /&gt;
Для скриптов платформы 1С это важно...&lt;br /&gt;
&lt;br /&gt;
 ln -s /sbin/httpd2 /sbin/httpd&lt;br /&gt;
&lt;br /&gt;
===Публикуем командой===&lt;br /&gt;
&lt;br /&gt;
Сначала создаём файл (оно само не может):&lt;br /&gt;
&lt;br /&gt;
 sudo touch /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
Потом публикуем:&lt;br /&gt;
&lt;br /&gt;
 sudo HOME=/home/user /opt/1cv8t/x86_64/8.5.1.1150/webinstt -apache24 -wsdir odata_base -dir /var/www/odata_base -connstr &amp;quot;File=/home/user/bases/base1;&amp;quot; -confPath /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
В ответ должно прийти что-то типа этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация выполнена&lt;br /&gt;
&lt;br /&gt;
или этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация обновлена&lt;br /&gt;
&lt;br /&gt;
Примерное содержимое файла в контексте конфигурационных файлов веб-сервера apache2:&lt;br /&gt;
&lt;br /&gt;
 cat /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LoadModule _1cws_module &amp;quot;/opt/1cv8t/x86_64/8.5.1.1150/wsap24t.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 1c publication&lt;br /&gt;
Alias &amp;quot;/odata_base&amp;quot; &amp;quot;/var/www/odata_base/&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/odata_base/&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride All&lt;br /&gt;
    Options None&lt;br /&gt;
    Require all granted&lt;br /&gt;
    SetHandler 1c-application&lt;br /&gt;
    ManagedApplicationDescriptor &amp;quot;/var/www/odata_base/default.vrd&amp;quot;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Исправляем параметр в конфигурации сервиса===&lt;br /&gt;
&lt;br /&gt;
Исправляем значение параметра:&lt;br /&gt;
&lt;br /&gt;
 sed -i 's/ProtectHome=yes/ProtectHome=no/g' /lib/systemd/system/httpd2.service&lt;br /&gt;
&lt;br /&gt;
После этого перезагрузим демона systemd&lt;br /&gt;
&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R apache2: /var/www/odata_base&lt;br /&gt;
chmod -R 755 /var/www/odata_base&lt;br /&gt;
&lt;br /&gt;
chmod a+x /home/user/&lt;br /&gt;
chmod a+x /home/user/bases/&lt;br /&gt;
&lt;br /&gt;
chown -R apache2:apache2 /home/user/bases/base1/&lt;br /&gt;
chmod -R 775 /home/user/bases/base1/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Перезапускаем веб-сервер===&lt;br /&gt;
&lt;br /&gt;
 systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
===Проверяем публикацию===&lt;br /&gt;
Идём браузером по адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако данная веб-страница возвращает внутреннюю ошибку платформы 1С. По всей видимости, в текущем режиме совместимости конфигурации графический модуль для отображения данного стандартного окна не генерируется веб-сервером (отсутствуют необходимые JS-скрипты для рендеринга интерфейса).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&amp;quot;#exception&amp;quot;:&amp;quot;{http://v8.1c.ru/8.2/virtual-resource-system}Exception&amp;quot;,&amp;quot;exception&amp;quot;:{&amp;quot;clsid&amp;quot;:&amp;quot;580392e6-ba49-4280-ac67-fcd6f2180121&amp;quot;,&amp;quot;reason&amp;quot;:404,&amp;quot;descr&amp;quot;:&amp;quot;HTTP: Not found\nError executing the query GET to resource /en/scripts/mod_bootstrap_bootstrap.js:&amp;quot;,&amp;quot;category&amp;quot;:&amp;quot;00000000000000000000000000&amp;quot;,&amp;quot;creationStack&amp;quot;:&amp;quot;mngsrvt:0x0000000000252DF5 mngsrvt:0x000000000024F8F4 vrsbaset:0x00000000006D7791 vrsbaset:0x00000000006540C5 vrsbaset:0x00000000006EBDE6 vrsbaset:0x00000000006D2A9C vrsbaset:0x00000000006EC4A9 vrsbaset:0x00000000006ED4A0 core85t:0x00000000008D4EBF core85t:0x00000000006B238C libc.so:0x0000000000000000 libc.so:0x0000000000000000 &amp;quot;}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Но это не помешает нам работать с OData.&lt;br /&gt;
&lt;br /&gt;
===Включение поддержки OData===&lt;br /&gt;
&lt;br /&gt;
Любым текстовым редактором открываем конфигурационный файл публикации:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /var/www/odata_base/default.vrd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Внутри тега &amp;lt;standardOdata&amp;gt; меняем значение параметра enable с false на true:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итоговый вид файла default.vrd:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;point xmlns=&amp;quot;http://v8.1c.ru/8.2/virtual-resource-system&amp;quot;&lt;br /&gt;
                xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
                xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
                base=&amp;quot;/odata_base&amp;quot;&lt;br /&gt;
                ib=&amp;quot;File=/home/user/bases/base1;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ws pointEnableCommon=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        reuseSessions=&amp;quot;autouse&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;20&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;10&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;analytics enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;1200&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;500&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/point&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После изменения конфигурации перезапускаем службу веб-сервера для применения настроек:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart httpd2.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки доступности интерфейса OData отправляем GET-запрос по адресу:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/odata/standard.odata/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример успешного ответа (корневой контейнер для пустой информационной базы):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;service xml:base=&amp;quot;http://localhost/odata_base/odata/standard.odata&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;workspace&amp;gt;&lt;br /&gt;
&amp;lt;atom:title&amp;gt;Default&amp;lt;/atom:title&amp;gt;&lt;br /&gt;
&amp;lt;/workspace&amp;gt;&lt;br /&gt;
&amp;lt;/service&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Автоматизация резервного копирования информационных баз==&lt;br /&gt;
&lt;br /&gt;
Предполагается, что платформа &amp;quot;1С Предприятие&amp;quot; работает на GNU/Linux системе и скрипт резервного копирования выполняется от пользователя&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
, графическое окружение которого автоматически запускается после загрузки компьютера.&lt;br /&gt;
&lt;br /&gt;
Дело в том, что по каким-то причинам, разработчики платформы &amp;quot;1С Предприятие&amp;quot; не заложили в систему запуск резервного копирования в headless-режиме, поэтому платформе необходим дисплей X-сервера.&lt;br /&gt;
&lt;br /&gt;
Также предполагается, что файл с паролем от пользователя платформы &amp;quot;1С Предприятие&amp;quot;, которому разрешено выполнять резервное копирование, хранится в файле&lt;br /&gt;
&lt;br /&gt;
 /home/administrator/.1c-cluster-infobases-backup.pass&lt;br /&gt;
&lt;br /&gt;
и рекомендуемые права на этот файл&lt;br /&gt;
&lt;br /&gt;
 0400&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Подготовка каталога для скриптов===&lt;br /&gt;
&lt;br /&gt;
 mkdir /opt/1c_backup_scripts&lt;br /&gt;
&lt;br /&gt;
===Базовый скрипт===&lt;br /&gt;
&lt;br /&gt;
При необходимости, в тексте скрипта, отредактируйте строчку&lt;br /&gt;
&lt;br /&gt;
 bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
, указав путь до конкретной версии платформы &amp;quot;1С Предприятие&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже предоставлен текст, который можно выделить, скопировать в текстовый редактор, при необходимости поправить, затем весь этот текст можно бросить в консоль для создания файла посредством heredoc-синтаксиса:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup_infobase_1c_generic.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export LANG=ru_RU.UTF-8&lt;br /&gt;
&lt;br /&gt;
NON_ROOT_USER=&amp;quot;administrator&amp;quot;&lt;br /&gt;
DISPLAY=&amp;quot;:0&amp;quot;&lt;br /&gt;
STORAGE=&amp;quot;${1}&amp;quot;&lt;br /&gt;
SRV=&amp;quot;${2}&amp;quot;&lt;br /&gt;
REF=&amp;quot;${3}&amp;quot;&lt;br /&gt;
LOGIN=&amp;quot;${4}&amp;quot;&lt;br /&gt;
PASSWORD_FILE=&amp;quot;${5}&amp;quot;&lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;${6}&amp;quot;&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;${7}&amp;quot;&lt;br /&gt;
TIMEOUT_COUNTER=0&lt;br /&gt;
LOCK_FILE_PATH=&amp;quot;/home/usr1cv8/.1cv8/1C/1cv8/reg_1541/snccntx8e79a393-c2af-4fd7-b25a-af6b5ed19bfa/snccntx.dat&amp;quot;&lt;br /&gt;
#-----------------------------&lt;br /&gt;
export DISPLAY=&amp;quot;${DISPLAY}&amp;quot;&lt;br /&gt;
bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
PASSWORD=`cat ${PASSWORD_FILE} | head -1`&lt;br /&gt;
infobase_suffix=&amp;quot;$(date +%Y-%m-%d-%H-%M-%S).dt&amp;quot;&lt;br /&gt;
TMP_STORAGE=&amp;quot;/opt/1c_backup_scripts/tmp_storage&amp;quot;&lt;br /&gt;
ib_tmp_filepath=&amp;quot;${TMP_STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_tmp_log=&amp;quot;${ib_tmp_filepath}.log&amp;quot;&lt;br /&gt;
ib_filepath=&amp;quot;${STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_log=&amp;quot;${ib_filepath}.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function rotate_backups(){&lt;br /&gt;
filenames_cmd=&amp;quot;${STORAGE}/${REF}*&amp;quot;&lt;br /&gt;
current_unixtime=`date +%s --date=&amp;quot;$(date +%Y-%m-%d) 00:00:00&amp;quot;`&lt;br /&gt;
test_unixtime=$(($current_unixtime-$KEEP_BACKUPS_FOR_LAST_DAYS*60*60*24))&lt;br /&gt;
&lt;br /&gt;
for f in $(/bin/ls $filenames_cmd); do&lt;br /&gt;
#echo &amp;quot;f=$f&amp;quot;&lt;br /&gt;
datetime_from_file=`echo ${f} | awk -F '__' {'print $2'} | awk -F '.' {'print $1'}`&lt;br /&gt;
#echo &amp;quot;datetime_from_file=${datetime_from_file}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#2023-12-24-22-01-02&lt;br /&gt;
Y=`echo ${datetime_from_file} | awk -F '-' {'print $1'}`&lt;br /&gt;
M=`echo ${datetime_from_file} | awk -F '-' {'print $2'}`&lt;br /&gt;
D=`echo ${datetime_from_file} | awk -F '-' {'print $3'}`&lt;br /&gt;
h=`echo ${datetime_from_file} | awk -F '-' {'print $4'}`&lt;br /&gt;
m=`echo ${datetime_from_file} | awk -F '-' {'print $5'}`&lt;br /&gt;
s=`echo ${datetime_from_file} | awk -F '-' {'print $6'}`&lt;br /&gt;
&lt;br /&gt;
unixtime_from_file=`date +%s --date=&amp;quot;${Y}-${M}-${D} ${h}:${m}:${s}&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
if [[ $unixtime_from_file -lt $test_unixtime ]]; then&lt;br /&gt;
  echo &amp;quot;delete file: ${f}&amp;quot;&lt;br /&gt;
  /bin/rm ${f}&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;keep file: ${f}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function wait(){&lt;br /&gt;
&lt;br /&gt;
  if [[ $TIMEOUT_COUNTER -ge $BACKUP_TIMEOUT_SEC ]]; then&lt;br /&gt;
    kill -9 ${1}&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  if [ ! -d /proc/${1}/ ]; then&lt;br /&gt;
    nice_text=&amp;quot;Выгрузка информационной базы успешно завершена&amp;quot;&lt;br /&gt;
    res_text=$(grep -o -i &amp;quot;${nice_text}&amp;quot; ${ib_tmp_log})&lt;br /&gt;
&lt;br /&gt;
    # start apache2&lt;br /&gt;
    sudo systemctl start httpd2&lt;br /&gt;
&lt;br /&gt;
    if [ &amp;quot;${res_text}&amp;quot; = &amp;quot;${nice_text}&amp;quot; ]; then&lt;br /&gt;
      /bin/cp ${ib_tmp_filepath} ${ib_filepath} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_filepath}&lt;br /&gt;
      /bin/cp ${ib_tmp_log} ${ib_log} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_log}&lt;br /&gt;
      #echo &amp;quot;TEST: ${ib_filepath} AND ${ib_log}&amp;quot;&lt;br /&gt;
      rotate_backups&lt;br /&gt;
      exit 0&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    exit 1&lt;br /&gt;
  fi&lt;br /&gt;
  #echo &amp;quot;pid alive: ${1}&amp;quot;&lt;br /&gt;
  sleep 1&lt;br /&gt;
  TIMEOUT_COUNTER=$(($TIMEOUT_COUNTER+1))&lt;br /&gt;
  wait ${1}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# prepare tmp storage&lt;br /&gt;
[ ! -d ${TMP_STORAGE} ] &amp;amp;&amp;amp; sudo mkdir &amp;quot;${TMP_STORAGE}&amp;quot; &amp;amp;&amp;amp; sudo chown administrator: &amp;quot;${TMP_STORAGE}&amp;quot; -R&lt;br /&gt;
&lt;br /&gt;
# stop apache2&lt;br /&gt;
sudo systemctl stop httpd2&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
# reset srv1cv8 sessions&lt;br /&gt;
sudo systemctl stop srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
sudo /bin/rm -f &amp;quot;${LOCK_FILE_PATH}&amp;quot;&lt;br /&gt;
sudo systemctl start srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
DISPLAY=:0 XAUTHORITY=/home/administrator/.Xauthority ${bin1c} CONFIG /N &amp;quot;${LOGIN}&amp;quot; /P &amp;quot;${PASSWORD}&amp;quot; /S &amp;quot;${SRV}/${REF}&amp;quot; /DumpIB &amp;quot;${ib_tmp_filepath}&amp;quot; /OUT &amp;quot;${ib_tmp_log}&amp;quot; &amp;amp;&lt;br /&gt;
main_process_pid=$!&lt;br /&gt;
&lt;br /&gt;
wait ${main_process_pid}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup_infobase_1c_generic.sh&lt;br /&gt;
&lt;br /&gt;
===Скрипт для резервирования конкретной базы данных===&lt;br /&gt;
Данный скрипт представляет из себя обёртку над выше приведённым скриптом, с заданием конкретных параметров резервирования&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup__my_super_infobase.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
### PARAMETERS ###&lt;br /&gt;
STORAGE=&amp;quot;/mnt/storage/my-1c-host-backups&amp;quot; # каталог для сохранения резервных копий&lt;br /&gt;
SRV=&amp;quot;my-1c-host&amp;quot;                          # хост, на котором работает платформа &amp;quot;1С: Предприятие&amp;quot;&lt;br /&gt;
REF=&amp;quot;my_super_infobase&amp;quot;                   # имя базы данных, которую резервируем&lt;br /&gt;
LOGIN=&amp;quot;backupuser&amp;quot;                        # 1с-пользователь, которому разрешено резервировать базу данных&lt;br /&gt;
PASSWORD_FILE=&amp;quot;/home/administrator/.1c-cluster-infobases-backup.pass&amp;quot; # в этом файле должен находиться только пароль от 1с-пользоателя &lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;2&amp;quot;            # сохранить резервные копии только за эти несколько последных дней (в текущем примере - за 2 последних дня)&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;300&amp;quot;                  # таймаут, в течение которого разрешено работать процессу резервирования (процессу платформы &amp;quot;1С: Предприятие&amp;quot;. Если за этот таймаут процесс не успел сделать резервную копию, то он снимается с выполнения)&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### BOT PARAMETERS&lt;br /&gt;
TELEGRAM_BOT_TOKEN=&amp;quot;&amp;quot;             # сюда нужно вписать токен телеграм-бота, который будет отсылать уведомления&lt;br /&gt;
TELEGRAM_DESTINATION_GROUP_ID=&amp;quot;&amp;quot;  # сюда нужно вписать идентификатор телеграм-пользователя или телеграм-группы (не забывайте про минус в начале, если это идентификатор группы), в которого (или в которую, если это группа) бот будет писать сообщения&lt;br /&gt;
&lt;br /&gt;
function send_message_telegram(){&lt;br /&gt;
#exit 0  # раскомментируйте эту строчку, если отсылка сообщений телеграм-ботом не нужна (следовательно, и параметры дя бота при этом можно не задавать)&lt;br /&gt;
message=${1}&lt;br /&gt;
curl -s -X POST \&lt;br /&gt;
     -H 'Content-Type: application/json' \&lt;br /&gt;
     -d &amp;quot;{\&amp;quot;chat_id\&amp;quot;: \&amp;quot;${TELEGRAM_DESTINATION_GROUP_ID}\&amp;quot;, \&amp;quot;text\&amp;quot;: \&amp;quot;${message}\&amp;quot;, \&amp;quot;disable_notification\&amp;quot;: true}&amp;quot; \&lt;br /&gt;
     https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage &amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### START ###&lt;br /&gt;
BASE=`dirname ${0}`&lt;br /&gt;
${BASE}/backup_infobase_1c_generic.sh &amp;quot;${STORAGE}&amp;quot; &amp;quot;${SRV}&amp;quot; &amp;quot;${REF}&amp;quot; &amp;quot;${LOGIN}&amp;quot; &amp;quot;${PASSWORD_FILE}&amp;quot; &amp;quot;${KEEP_BACKUPS_FOR_LAST_DAYS}&amp;quot; &amp;quot;${BACKUP_TIMEOUT_SEC}&amp;quot;&lt;br /&gt;
res=$?&lt;br /&gt;
&lt;br /&gt;
if [ ${res} -eq 0 ]; then&lt;br /&gt;
send_message_telegram &amp;quot;[Успешно]\nРезервное копирование информационной базы '${REF}' выполнено успешно&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
send_message_telegram &amp;quot;[Ошибка]\nРезервное копирование информационной базы '${REF}' не выполнено&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&lt;br /&gt;
===Ставим задачу для планировщика cron===&lt;br /&gt;
&lt;br /&gt;
Под пользователем&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
в терминале открываем временный файл для настройки crontab&lt;br /&gt;
&lt;br /&gt;
 EDITOR=nano crontab -e&lt;br /&gt;
&lt;br /&gt;
в результате редактором&lt;br /&gt;
&lt;br /&gt;
 nano&lt;br /&gt;
&lt;br /&gt;
будет открыт временный файл для установки параметров планировщика для текущего пользователя. Отредактировав и сохранив (Ctrl+O - Enter) изменения в этом файле и закрыв редактор (Ctrl+X) будет сконфигурирован планировщик для текущего пользователя.&lt;br /&gt;
&lt;br /&gt;
Проверить корректность заданных параметров планировщика можно выполнением команды&lt;br /&gt;
&lt;br /&gt;
 crontab -l&lt;br /&gt;
&lt;br /&gt;
В случае, если планировщик был сконфигурирован на запуск скрипта резервного копирования каждые сутки с 23:01, вывод команды проверки должен быть примерно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#minute (0-59),&lt;br /&gt;
#|	hour (0-23),&lt;br /&gt;
#|	|	day of the month (1-31),&lt;br /&gt;
#|	|	|	month of the year (1-12),&lt;br /&gt;
#|	|	|	|	day of the week (0-6 with 0=Sunday).&lt;br /&gt;
#|	|	|	|	|	commands&lt;br /&gt;
1       23	*	*	*	/opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11363</id>
		<title>1c</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11363"/>
		<updated>2026-06-12T21:47:46Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: /* В GNU/Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=В GNU/Linux=&lt;br /&gt;
&lt;br /&gt;
==Установка учебной платформы 8.5.x на ОС Альт Стартеркит p11 GNOME==&lt;br /&gt;
&lt;br /&gt;
===Обновить ОС и ядро===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get update -y &amp;amp;&amp;amp; apt-get dist-upgrade -y &amp;amp;&amp;amp; update-kernel -y&lt;br /&gt;
&lt;br /&gt;
===Поставить пакеты===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get install -f alt-tour firefox libwebkit2gtk 1c-preinstall-full libglui&lt;br /&gt;
&lt;br /&gt;
===Включить sudo su===&lt;br /&gt;
&lt;br /&gt;
Раскоментировать в файле:&lt;br /&gt;
&lt;br /&gt;
 /etc/sudoers&lt;br /&gt;
&lt;br /&gt;
строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
или строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) NOPASSWD: ALL&lt;br /&gt;
&lt;br /&gt;
(если необходимо выполнять sudo su без пароля)&lt;br /&gt;
&lt;br /&gt;
===Установить платформу===&lt;br /&gt;
&lt;br /&gt;
Предполагается, что есть файл установки платформы:&lt;br /&gt;
&lt;br /&gt;
 setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Тогда установка осуществляетс следующим образом:&lt;br /&gt;
&lt;br /&gt;
 chmod +x setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
 sudo ./setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Далее следуем инструкциям установщика. В установщике необходимо выбрать пункт &amp;quot;Установить ярлыки&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Установщик сам переключится в режим текстового интерфейса, если не найдёт дисплей (например, при установке по ssh). А вообще он имеет графический интерфейс...&lt;br /&gt;
&lt;br /&gt;
===Починить запуск платформы (актуально для ОС Альт веток p10 и p11 как минимум)===&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Получилось? Если да, то странно... Должна быть такая ошибка:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libicuuc.so.74)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjxl.so.0.11)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_12.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_13.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
&lt;br /&gt;
Не такая ошибка? Если да, то вы точно все пункты до этого выполнили (точно пакеты все установлены, которые выше в команде установки пакетовв перечислены)?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если ошибка такая, то чиним:&lt;br /&gt;
&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить ещё раз:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Всё должно работать. Теперь можно запускать платформу посредством ярлыков (кнопок меню приложений)&lt;br /&gt;
&lt;br /&gt;
По прежнему не запускается? Если да, то спешим на встречу новым приключениям!&lt;br /&gt;
&lt;br /&gt;
===Переопределить настройки по умолчанию для ОС Альт===&lt;br /&gt;
&lt;br /&gt;
Перезагрузиться&lt;br /&gt;
&lt;br /&gt;
====Каталог для файловых баз данных платформы 1С и sgid-bit====&lt;br /&gt;
&lt;br /&gt;
Поскольку полный путь до каталога с файловой базой данных будет фигурировать в конфигурационных файлах веб-сервера, его рекомендуется сделать отличным от пути по умолчанию, который предлагает платформа 1С.&lt;br /&gt;
&lt;br /&gt;
Например, так:&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/bases&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При публикации базы данных через веб-сервер необходимо чтобы у процесса веб-сервера, запущенного от пользователя&lt;br /&gt;
&lt;br /&gt;
 apache2&lt;br /&gt;
&lt;br /&gt;
был доступ на чтение и запись в каталог с базой данных конфигурации 1С.&lt;br /&gt;
&lt;br /&gt;
Один из вариантов это сделать следующий:&lt;br /&gt;
&lt;br /&gt;
1. Разрешаем членам группы-владельца каталога чтение и запись&lt;br /&gt;
&lt;br /&gt;
 chmod g+rwx ~/bases -R&lt;br /&gt;
&lt;br /&gt;
2. Устанавливаем sgid бит на каталог&lt;br /&gt;
&lt;br /&gt;
 chmod g+s ~/bases -R&lt;br /&gt;
&lt;br /&gt;
3. Добавляем пользователя apache2 в группу-владельца каталога&lt;br /&gt;
&lt;br /&gt;
 sudo usermod -aG user apache2&lt;br /&gt;
&lt;br /&gt;
==Публикация REST/Odata на веб-сервере==&lt;br /&gt;
&lt;br /&gt;
Предполагается что до этого были выполнены все действия в предыдущем разделе...&lt;br /&gt;
&lt;br /&gt;
===Устанавливаем и включаем веб-сервер apache2===&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install -y apache2&lt;br /&gt;
 sudo systemctl enable --now httpd2&lt;br /&gt;
&lt;br /&gt;
===Создаём симлинк для httpd2===&lt;br /&gt;
&lt;br /&gt;
Для скриптов платформы 1С это важно...&lt;br /&gt;
&lt;br /&gt;
 ln -s /sbin/httpd2 /sbin/httpd&lt;br /&gt;
&lt;br /&gt;
===Публикуем командой===&lt;br /&gt;
&lt;br /&gt;
Сначала создаём файл (оно само не может):&lt;br /&gt;
&lt;br /&gt;
 sudo touch /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
Потом публикуем:&lt;br /&gt;
&lt;br /&gt;
 sudo HOME=/home/user /opt/1cv8t/x86_64/8.5.1.1150/webinstt -apache24 -wsdir odata_base -dir /var/www/odata_base -connstr &amp;quot;File=/home/user/bases/base1;&amp;quot; -confPath /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
В ответ должно прийти что-то типа этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация выполнена&lt;br /&gt;
&lt;br /&gt;
или этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация обновлена&lt;br /&gt;
&lt;br /&gt;
Примерное содержимое файла в контексте конфигурационных файлов веб-сервера apache2:&lt;br /&gt;
&lt;br /&gt;
 cat /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LoadModule _1cws_module &amp;quot;/opt/1cv8t/x86_64/8.5.1.1150/wsap24t.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 1c publication&lt;br /&gt;
Alias &amp;quot;/odata_base&amp;quot; &amp;quot;/var/www/odata_base/&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/odata_base/&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride All&lt;br /&gt;
    Options None&lt;br /&gt;
    Require all granted&lt;br /&gt;
    SetHandler 1c-application&lt;br /&gt;
    ManagedApplicationDescriptor &amp;quot;/var/www/odata_base/default.vrd&amp;quot;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Исправляем параметр в конфигурации сервиса===&lt;br /&gt;
&lt;br /&gt;
Исправляем значение параметра:&lt;br /&gt;
&lt;br /&gt;
 sed -i 's/ProtectHome=yes/ProtectHome=no/g' /lib/systemd/system/httpd2.service&lt;br /&gt;
&lt;br /&gt;
После этого перезагрузим демона systemd&lt;br /&gt;
&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R apache2: /var/www/odata_base&lt;br /&gt;
chmod -R 755 /var/www/odata_base&lt;br /&gt;
&lt;br /&gt;
chmod a+x /home/user/&lt;br /&gt;
chmod a+x /home/user/bases/&lt;br /&gt;
&lt;br /&gt;
chown -R apache2:apache2 /home/user/bases/base1/&lt;br /&gt;
chmod -R 775 /home/user/bases/base1/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Перезапускаем веб-сервер===&lt;br /&gt;
&lt;br /&gt;
 systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
===Проверяем публикацию===&lt;br /&gt;
&lt;br /&gt;
Идём браузером по адресу:&lt;br /&gt;
&lt;br /&gt;
==Автоматизация резервного копирования информационных баз==&lt;br /&gt;
&lt;br /&gt;
Предполагается, что платформа &amp;quot;1С Предприятие&amp;quot; работает на GNU/Linux системе и скрипт резервного копирования выполняется от пользователя&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
, графическое окружение которого автоматически запускается после загрузки компьютера.&lt;br /&gt;
&lt;br /&gt;
Дело в том, что по каким-то причинам, разработчики платформы &amp;quot;1С Предприятие&amp;quot; не заложили в систему запуск резервного копирования в headless-режиме, поэтому платформе необходим дисплей X-сервера.&lt;br /&gt;
&lt;br /&gt;
Также предполагается, что файл с паролем от пользователя платформы &amp;quot;1С Предприятие&amp;quot;, которому разрешено выполнять резервное копирование, хранится в файле&lt;br /&gt;
&lt;br /&gt;
 /home/administrator/.1c-cluster-infobases-backup.pass&lt;br /&gt;
&lt;br /&gt;
и рекомендуемые права на этот файл&lt;br /&gt;
&lt;br /&gt;
 0400&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Подготовка каталога для скриптов===&lt;br /&gt;
&lt;br /&gt;
 mkdir /opt/1c_backup_scripts&lt;br /&gt;
&lt;br /&gt;
===Базовый скрипт===&lt;br /&gt;
&lt;br /&gt;
При необходимости, в тексте скрипта, отредактируйте строчку&lt;br /&gt;
&lt;br /&gt;
 bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
, указав путь до конкретной версии платформы &amp;quot;1С Предприятие&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже предоставлен текст, который можно выделить, скопировать в текстовый редактор, при необходимости поправить, затем весь этот текст можно бросить в консоль для создания файла посредством heredoc-синтаксиса:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup_infobase_1c_generic.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export LANG=ru_RU.UTF-8&lt;br /&gt;
&lt;br /&gt;
NON_ROOT_USER=&amp;quot;administrator&amp;quot;&lt;br /&gt;
DISPLAY=&amp;quot;:0&amp;quot;&lt;br /&gt;
STORAGE=&amp;quot;${1}&amp;quot;&lt;br /&gt;
SRV=&amp;quot;${2}&amp;quot;&lt;br /&gt;
REF=&amp;quot;${3}&amp;quot;&lt;br /&gt;
LOGIN=&amp;quot;${4}&amp;quot;&lt;br /&gt;
PASSWORD_FILE=&amp;quot;${5}&amp;quot;&lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;${6}&amp;quot;&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;${7}&amp;quot;&lt;br /&gt;
TIMEOUT_COUNTER=0&lt;br /&gt;
LOCK_FILE_PATH=&amp;quot;/home/usr1cv8/.1cv8/1C/1cv8/reg_1541/snccntx8e79a393-c2af-4fd7-b25a-af6b5ed19bfa/snccntx.dat&amp;quot;&lt;br /&gt;
#-----------------------------&lt;br /&gt;
export DISPLAY=&amp;quot;${DISPLAY}&amp;quot;&lt;br /&gt;
bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
PASSWORD=`cat ${PASSWORD_FILE} | head -1`&lt;br /&gt;
infobase_suffix=&amp;quot;$(date +%Y-%m-%d-%H-%M-%S).dt&amp;quot;&lt;br /&gt;
TMP_STORAGE=&amp;quot;/opt/1c_backup_scripts/tmp_storage&amp;quot;&lt;br /&gt;
ib_tmp_filepath=&amp;quot;${TMP_STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_tmp_log=&amp;quot;${ib_tmp_filepath}.log&amp;quot;&lt;br /&gt;
ib_filepath=&amp;quot;${STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_log=&amp;quot;${ib_filepath}.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function rotate_backups(){&lt;br /&gt;
filenames_cmd=&amp;quot;${STORAGE}/${REF}*&amp;quot;&lt;br /&gt;
current_unixtime=`date +%s --date=&amp;quot;$(date +%Y-%m-%d) 00:00:00&amp;quot;`&lt;br /&gt;
test_unixtime=$(($current_unixtime-$KEEP_BACKUPS_FOR_LAST_DAYS*60*60*24))&lt;br /&gt;
&lt;br /&gt;
for f in $(/bin/ls $filenames_cmd); do&lt;br /&gt;
#echo &amp;quot;f=$f&amp;quot;&lt;br /&gt;
datetime_from_file=`echo ${f} | awk -F '__' {'print $2'} | awk -F '.' {'print $1'}`&lt;br /&gt;
#echo &amp;quot;datetime_from_file=${datetime_from_file}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#2023-12-24-22-01-02&lt;br /&gt;
Y=`echo ${datetime_from_file} | awk -F '-' {'print $1'}`&lt;br /&gt;
M=`echo ${datetime_from_file} | awk -F '-' {'print $2'}`&lt;br /&gt;
D=`echo ${datetime_from_file} | awk -F '-' {'print $3'}`&lt;br /&gt;
h=`echo ${datetime_from_file} | awk -F '-' {'print $4'}`&lt;br /&gt;
m=`echo ${datetime_from_file} | awk -F '-' {'print $5'}`&lt;br /&gt;
s=`echo ${datetime_from_file} | awk -F '-' {'print $6'}`&lt;br /&gt;
&lt;br /&gt;
unixtime_from_file=`date +%s --date=&amp;quot;${Y}-${M}-${D} ${h}:${m}:${s}&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
if [[ $unixtime_from_file -lt $test_unixtime ]]; then&lt;br /&gt;
  echo &amp;quot;delete file: ${f}&amp;quot;&lt;br /&gt;
  /bin/rm ${f}&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;keep file: ${f}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function wait(){&lt;br /&gt;
&lt;br /&gt;
  if [[ $TIMEOUT_COUNTER -ge $BACKUP_TIMEOUT_SEC ]]; then&lt;br /&gt;
    kill -9 ${1}&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  if [ ! -d /proc/${1}/ ]; then&lt;br /&gt;
    nice_text=&amp;quot;Выгрузка информационной базы успешно завершена&amp;quot;&lt;br /&gt;
    res_text=$(grep -o -i &amp;quot;${nice_text}&amp;quot; ${ib_tmp_log})&lt;br /&gt;
&lt;br /&gt;
    # start apache2&lt;br /&gt;
    sudo systemctl start httpd2&lt;br /&gt;
&lt;br /&gt;
    if [ &amp;quot;${res_text}&amp;quot; = &amp;quot;${nice_text}&amp;quot; ]; then&lt;br /&gt;
      /bin/cp ${ib_tmp_filepath} ${ib_filepath} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_filepath}&lt;br /&gt;
      /bin/cp ${ib_tmp_log} ${ib_log} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_log}&lt;br /&gt;
      #echo &amp;quot;TEST: ${ib_filepath} AND ${ib_log}&amp;quot;&lt;br /&gt;
      rotate_backups&lt;br /&gt;
      exit 0&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    exit 1&lt;br /&gt;
  fi&lt;br /&gt;
  #echo &amp;quot;pid alive: ${1}&amp;quot;&lt;br /&gt;
  sleep 1&lt;br /&gt;
  TIMEOUT_COUNTER=$(($TIMEOUT_COUNTER+1))&lt;br /&gt;
  wait ${1}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# prepare tmp storage&lt;br /&gt;
[ ! -d ${TMP_STORAGE} ] &amp;amp;&amp;amp; sudo mkdir &amp;quot;${TMP_STORAGE}&amp;quot; &amp;amp;&amp;amp; sudo chown administrator: &amp;quot;${TMP_STORAGE}&amp;quot; -R&lt;br /&gt;
&lt;br /&gt;
# stop apache2&lt;br /&gt;
sudo systemctl stop httpd2&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
# reset srv1cv8 sessions&lt;br /&gt;
sudo systemctl stop srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
sudo /bin/rm -f &amp;quot;${LOCK_FILE_PATH}&amp;quot;&lt;br /&gt;
sudo systemctl start srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
DISPLAY=:0 XAUTHORITY=/home/administrator/.Xauthority ${bin1c} CONFIG /N &amp;quot;${LOGIN}&amp;quot; /P &amp;quot;${PASSWORD}&amp;quot; /S &amp;quot;${SRV}/${REF}&amp;quot; /DumpIB &amp;quot;${ib_tmp_filepath}&amp;quot; /OUT &amp;quot;${ib_tmp_log}&amp;quot; &amp;amp;&lt;br /&gt;
main_process_pid=$!&lt;br /&gt;
&lt;br /&gt;
wait ${main_process_pid}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup_infobase_1c_generic.sh&lt;br /&gt;
&lt;br /&gt;
===Скрипт для резервирования конкретной базы данных===&lt;br /&gt;
Данный скрипт представляет из себя обёртку над выше приведённым скриптом, с заданием конкретных параметров резервирования&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup__my_super_infobase.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
### PARAMETERS ###&lt;br /&gt;
STORAGE=&amp;quot;/mnt/storage/my-1c-host-backups&amp;quot; # каталог для сохранения резервных копий&lt;br /&gt;
SRV=&amp;quot;my-1c-host&amp;quot;                          # хост, на котором работает платформа &amp;quot;1С: Предприятие&amp;quot;&lt;br /&gt;
REF=&amp;quot;my_super_infobase&amp;quot;                   # имя базы данных, которую резервируем&lt;br /&gt;
LOGIN=&amp;quot;backupuser&amp;quot;                        # 1с-пользователь, которому разрешено резервировать базу данных&lt;br /&gt;
PASSWORD_FILE=&amp;quot;/home/administrator/.1c-cluster-infobases-backup.pass&amp;quot; # в этом файле должен находиться только пароль от 1с-пользоателя &lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;2&amp;quot;            # сохранить резервные копии только за эти несколько последных дней (в текущем примере - за 2 последних дня)&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;300&amp;quot;                  # таймаут, в течение которого разрешено работать процессу резервирования (процессу платформы &amp;quot;1С: Предприятие&amp;quot;. Если за этот таймаут процесс не успел сделать резервную копию, то он снимается с выполнения)&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### BOT PARAMETERS&lt;br /&gt;
TELEGRAM_BOT_TOKEN=&amp;quot;&amp;quot;             # сюда нужно вписать токен телеграм-бота, который будет отсылать уведомления&lt;br /&gt;
TELEGRAM_DESTINATION_GROUP_ID=&amp;quot;&amp;quot;  # сюда нужно вписать идентификатор телеграм-пользователя или телеграм-группы (не забывайте про минус в начале, если это идентификатор группы), в которого (или в которую, если это группа) бот будет писать сообщения&lt;br /&gt;
&lt;br /&gt;
function send_message_telegram(){&lt;br /&gt;
#exit 0  # раскомментируйте эту строчку, если отсылка сообщений телеграм-ботом не нужна (следовательно, и параметры дя бота при этом можно не задавать)&lt;br /&gt;
message=${1}&lt;br /&gt;
curl -s -X POST \&lt;br /&gt;
     -H 'Content-Type: application/json' \&lt;br /&gt;
     -d &amp;quot;{\&amp;quot;chat_id\&amp;quot;: \&amp;quot;${TELEGRAM_DESTINATION_GROUP_ID}\&amp;quot;, \&amp;quot;text\&amp;quot;: \&amp;quot;${message}\&amp;quot;, \&amp;quot;disable_notification\&amp;quot;: true}&amp;quot; \&lt;br /&gt;
     https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage &amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### START ###&lt;br /&gt;
BASE=`dirname ${0}`&lt;br /&gt;
${BASE}/backup_infobase_1c_generic.sh &amp;quot;${STORAGE}&amp;quot; &amp;quot;${SRV}&amp;quot; &amp;quot;${REF}&amp;quot; &amp;quot;${LOGIN}&amp;quot; &amp;quot;${PASSWORD_FILE}&amp;quot; &amp;quot;${KEEP_BACKUPS_FOR_LAST_DAYS}&amp;quot; &amp;quot;${BACKUP_TIMEOUT_SEC}&amp;quot;&lt;br /&gt;
res=$?&lt;br /&gt;
&lt;br /&gt;
if [ ${res} -eq 0 ]; then&lt;br /&gt;
send_message_telegram &amp;quot;[Успешно]\nРезервное копирование информационной базы '${REF}' выполнено успешно&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
send_message_telegram &amp;quot;[Ошибка]\nРезервное копирование информационной базы '${REF}' не выполнено&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&lt;br /&gt;
===Ставим задачу для планировщика cron===&lt;br /&gt;
&lt;br /&gt;
Под пользователем&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
в терминале открываем временный файл для настройки crontab&lt;br /&gt;
&lt;br /&gt;
 EDITOR=nano crontab -e&lt;br /&gt;
&lt;br /&gt;
в результате редактором&lt;br /&gt;
&lt;br /&gt;
 nano&lt;br /&gt;
&lt;br /&gt;
будет открыт временный файл для установки параметров планировщика для текущего пользователя. Отредактировав и сохранив (Ctrl+O - Enter) изменения в этом файле и закрыв редактор (Ctrl+X) будет сконфигурирован планировщик для текущего пользователя.&lt;br /&gt;
&lt;br /&gt;
Проверить корректность заданных параметров планировщика можно выполнением команды&lt;br /&gt;
&lt;br /&gt;
 crontab -l&lt;br /&gt;
&lt;br /&gt;
В случае, если планировщик был сконфигурирован на запуск скрипта резервного копирования каждые сутки с 23:01, вывод команды проверки должен быть примерно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#minute (0-59),&lt;br /&gt;
#|	hour (0-23),&lt;br /&gt;
#|	|	day of the month (1-31),&lt;br /&gt;
#|	|	|	month of the year (1-12),&lt;br /&gt;
#|	|	|	|	day of the week (0-6 with 0=Sunday).&lt;br /&gt;
#|	|	|	|	|	commands&lt;br /&gt;
1       23	*	*	*	/opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11362</id>
		<title>1c</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11362"/>
		<updated>2026-06-12T21:45:05Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=В GNU/Linux=&lt;br /&gt;
&lt;br /&gt;
==Установка учебной платформы 8.5.x на ОС Альт Стартеркит p11 GNOME==&lt;br /&gt;
&lt;br /&gt;
===Обновить ОС и ядро===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get update -y &amp;amp;&amp;amp; apt-get dist-upgrade -y &amp;amp;&amp;amp; update-kernel -y&lt;br /&gt;
&lt;br /&gt;
===Поставить пакеты===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get install -f alt-tour firefox libwebkit2gtk 1c-preinstall-full libglui&lt;br /&gt;
&lt;br /&gt;
===Включить sudo su===&lt;br /&gt;
&lt;br /&gt;
Раскоментировать в файле:&lt;br /&gt;
&lt;br /&gt;
 /etc/sudoers&lt;br /&gt;
&lt;br /&gt;
строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
или строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) NOPASSWD: ALL&lt;br /&gt;
&lt;br /&gt;
(если необходимо выполнять sudo su без пароля)&lt;br /&gt;
&lt;br /&gt;
===Установить платформу===&lt;br /&gt;
&lt;br /&gt;
Предполагается, что есть файл установки платформы:&lt;br /&gt;
&lt;br /&gt;
 setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Тогда установка осуществляетс следующим образом:&lt;br /&gt;
&lt;br /&gt;
 chmod +x setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
 sudo ./setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Далее следуем инструкциям установщика. В установщике необходимо выбрать пункт &amp;quot;Установить ярлыки&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Установщик сам переключится в режим текстового интерфейса, если не найдёт дисплей (например, при установке по ssh). А вообще он имеет графический интерфейс...&lt;br /&gt;
&lt;br /&gt;
===Починить запуск платформы (актуально для ОС Альт веток p10 и p11 как минимум)===&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Получилось? Если да, то странно... Должна быть такая ошибка:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libicuuc.so.74)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjxl.so.0.11)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_12.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_13.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
&lt;br /&gt;
Не такая ошибка? Если да, то вы точно все пункты до этого выполнили (точно пакеты все установлены, которые выше в команде установки пакетовв перечислены)?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если ошибка такая, то чиним:&lt;br /&gt;
&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить ещё раз:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Всё должно работать. Теперь можно запускать платформу посредством ярлыков (кнопок меню приложений)&lt;br /&gt;
&lt;br /&gt;
По прежнему не запускается? Если да, то спешим на встречу новым приключениям!&lt;br /&gt;
&lt;br /&gt;
===Переопределить настройки по умолчанию для ОС Альт===&lt;br /&gt;
&lt;br /&gt;
Перезагрузиться&lt;br /&gt;
&lt;br /&gt;
====Каталог для файловых баз данных платформы 1С и sgid-bit====&lt;br /&gt;
&lt;br /&gt;
Поскольку полный путь до каталога с файловой базой данных будет фигурировать в конфигурационных файлах веб-сервера, его рекомендуется сделать отличным от пути по умолчанию, который предлагает платформа 1С.&lt;br /&gt;
&lt;br /&gt;
Например, так:&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/bases&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При публикации базы данных через веб-сервер необходимо чтобы у процесса веб-сервера, запущенного от пользователя&lt;br /&gt;
&lt;br /&gt;
 apache2&lt;br /&gt;
&lt;br /&gt;
был доступ на чтение и запись в каталог с базой данных конфигурации 1С.&lt;br /&gt;
&lt;br /&gt;
Один из вариантов это сделать следующий:&lt;br /&gt;
&lt;br /&gt;
1. Разрешаем членам группы-владельца каталога чтение и запись&lt;br /&gt;
&lt;br /&gt;
 chmod g+rwx ~/bases -R&lt;br /&gt;
&lt;br /&gt;
2. Устанавливаем sgid бит на каталог&lt;br /&gt;
&lt;br /&gt;
 chmod g+s ~/bases -R&lt;br /&gt;
&lt;br /&gt;
3. Добавляем пользователя apache2 в группу-владельца каталога&lt;br /&gt;
&lt;br /&gt;
 sudo usermod -aG user apache2&lt;br /&gt;
&lt;br /&gt;
==Публикация REST/Odata на веб-сервере==&lt;br /&gt;
&lt;br /&gt;
Предполагается что до этого были выполнены все действия в предыдущем разделе...&lt;br /&gt;
&lt;br /&gt;
===Устанавливаем и включаем веб-сервер apache2===&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install -y apache2&lt;br /&gt;
 sudo systemctl enable --now httpd2&lt;br /&gt;
&lt;br /&gt;
===Создаём симлинк для httpd2===&lt;br /&gt;
&lt;br /&gt;
Для скриптов платформы 1С это важно...&lt;br /&gt;
&lt;br /&gt;
 ln -s /sbin/httpd2 /sbin/httpd&lt;br /&gt;
&lt;br /&gt;
===Публикуем командой===&lt;br /&gt;
&lt;br /&gt;
Сначала создаём файл (оно само не может):&lt;br /&gt;
&lt;br /&gt;
 sudo touch /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
Потом публикуем:&lt;br /&gt;
&lt;br /&gt;
 sudo HOME=/home/user /opt/1cv8t/x86_64/8.5.1.1150/webinstt -apache24 -wsdir odata_base -dir /var/www/odata_base -connstr &amp;quot;File=/home/user/bases/base1;&amp;quot; -confPath /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
В ответ должно прийти что-то типа этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация выполнена&lt;br /&gt;
&lt;br /&gt;
или этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация обновлена&lt;br /&gt;
&lt;br /&gt;
Примерное содержимое файла в контексте конфигурационных файлов веб-сервера apache2:&lt;br /&gt;
&lt;br /&gt;
 cat /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LoadModule _1cws_module &amp;quot;/opt/1cv8t/x86_64/8.5.1.1150/wsap24t.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 1c publication&lt;br /&gt;
Alias &amp;quot;/odata_base&amp;quot; &amp;quot;/var/www/odata_base/&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/odata_base/&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride All&lt;br /&gt;
    Options None&lt;br /&gt;
    Require all granted&lt;br /&gt;
    SetHandler 1c-application&lt;br /&gt;
    ManagedApplicationDescriptor &amp;quot;/var/www/odata_base/default.vrd&amp;quot;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Исправляем параметр в конфигурации сервиса===&lt;br /&gt;
&lt;br /&gt;
Исправляем значение параметра:&lt;br /&gt;
&lt;br /&gt;
 sed -i 's/ProtectHome=yes/ProtectHome=no/g' /lib/systemd/system/httpd2.service&lt;br /&gt;
&lt;br /&gt;
После этого перезагрузим демона systemd&lt;br /&gt;
&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R apache2: /var/www/odata_base&lt;br /&gt;
chmod -R 755 /var/www/odata_base&lt;br /&gt;
&lt;br /&gt;
chmod a+x /home/user/&lt;br /&gt;
chmod a+x /home/user/bases/&lt;br /&gt;
&lt;br /&gt;
chown -R apache2:apache2 /home/user/bases/base1/&lt;br /&gt;
chmod -R 775 /home/user/bases/base1/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Перезапускаем веб-сервер===&lt;br /&gt;
&lt;br /&gt;
 systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
===Проверяем публикацию===&lt;br /&gt;
&lt;br /&gt;
Идём браузером по адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако данная веб-страница возвращает внутреннюю ошибку платформы 1С. По всей видимости, в текущем режиме совместимости конфигурации графический модуль для отображения данного стандартного окна не генерируется веб-сервером (отсутствуют необходимые JS-скрипты для рендеринга интерфейса).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&amp;quot;#exception&amp;quot;:&amp;quot;{http://v8.1c.ru/8.2/virtual-resource-system}Exception&amp;quot;,&amp;quot;exception&amp;quot;:{&amp;quot;clsid&amp;quot;:&amp;quot;580392e6-ba49-4280-ac67-fcd6f2180121&amp;quot;,&amp;quot;reason&amp;quot;:404,&amp;quot;descr&amp;quot;:&amp;quot;HTTP: Not found\nError executing the query GET to resource /en/scripts/mod_bootstrap_bootstrap.js:&amp;quot;,&amp;quot;category&amp;quot;:&amp;quot;00000000000000000000000000&amp;quot;,&amp;quot;creationStack&amp;quot;:&amp;quot;mngsrvt:0x0000000000252DF5 mngsrvt:0x000000000024F8F4 vrsbaset:0x00000000006D7791 vrsbaset:0x00000000006540C5 vrsbaset:0x00000000006EBDE6 vrsbaset:0x00000000006D2A9C vrsbaset:0x00000000006EC4A9 vrsbaset:0x00000000006ED4A0 core85t:0x00000000008D4EBF core85t:0x00000000006B238C libc.so:0x0000000000000000 libc.so:0x0000000000000000 &amp;quot;}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Но это не помешает нам работать с OData.&lt;br /&gt;
&lt;br /&gt;
===Включение поддержки OData===&lt;br /&gt;
&lt;br /&gt;
Любым текстовым редактором открываем конфигурационный файл публикации:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /var/www/odata_base/default.vrd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Внутри тега &amp;lt;standardOdata&amp;gt; меняем значение параметра enable с false на true:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итоговый вид файла default.vrd:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;point xmlns=&amp;quot;http://v8.1c.ru/8.2/virtual-resource-system&amp;quot;&lt;br /&gt;
                xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
                xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
                base=&amp;quot;/odata_base&amp;quot;&lt;br /&gt;
                ib=&amp;quot;File=/home/user/bases/base1;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ws pointEnableCommon=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;standardOdata enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        reuseSessions=&amp;quot;autouse&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;20&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;10&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;analytics enable=&amp;quot;true&amp;quot;&lt;br /&gt;
                        sessionMaxAge=&amp;quot;1200&amp;quot;&lt;br /&gt;
                        poolSize=&amp;quot;500&amp;quot;&lt;br /&gt;
                        poolTimeout=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/point&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После изменения конфигурации перезапускаем службу веб-сервера для применения настроек:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart httpd2.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки доступности интерфейса OData отправляем GET-запрос по адресу:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/odata/standard.odata/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример успешного ответа (корневой контейнер для пустой информационной базы):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;service xml:base=&amp;quot;http://localhost/odata_base/odata/standard.odata&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;workspace&amp;gt;&lt;br /&gt;
&amp;lt;atom:title&amp;gt;Default&amp;lt;/atom:title&amp;gt;&lt;br /&gt;
&amp;lt;/workspace&amp;gt;&lt;br /&gt;
&amp;lt;/service&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Автоматизация резервного копирования информационных баз==&lt;br /&gt;
&lt;br /&gt;
Предполагается, что платформа &amp;quot;1С Предприятие&amp;quot; работает на GNU/Linux системе и скрипт резервного копирования выполняется от пользователя&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
, графическое окружение которого автоматически запускается после загрузки компьютера.&lt;br /&gt;
&lt;br /&gt;
Дело в том, что по каким-то причинам, разработчики платформы &amp;quot;1С Предприятие&amp;quot; не заложили в систему запуск резервного копирования в headless-режиме, поэтому платформе необходим дисплей X-сервера.&lt;br /&gt;
&lt;br /&gt;
Также предполагается, что файл с паролем от пользователя платформы &amp;quot;1С Предприятие&amp;quot;, которому разрешено выполнять резервное копирование, хранится в файле&lt;br /&gt;
&lt;br /&gt;
 /home/administrator/.1c-cluster-infobases-backup.pass&lt;br /&gt;
&lt;br /&gt;
и рекомендуемые права на этот файл&lt;br /&gt;
&lt;br /&gt;
 0400&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Подготовка каталога для скриптов===&lt;br /&gt;
&lt;br /&gt;
 mkdir /opt/1c_backup_scripts&lt;br /&gt;
&lt;br /&gt;
===Базовый скрипт===&lt;br /&gt;
&lt;br /&gt;
При необходимости, в тексте скрипта, отредактируйте строчку&lt;br /&gt;
&lt;br /&gt;
 bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
, указав путь до конкретной версии платформы &amp;quot;1С Предприятие&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже предоставлен текст, который можно выделить, скопировать в текстовый редактор, при необходимости поправить, затем весь этот текст можно бросить в консоль для создания файла посредством heredoc-синтаксиса:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup_infobase_1c_generic.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export LANG=ru_RU.UTF-8&lt;br /&gt;
&lt;br /&gt;
NON_ROOT_USER=&amp;quot;administrator&amp;quot;&lt;br /&gt;
DISPLAY=&amp;quot;:0&amp;quot;&lt;br /&gt;
STORAGE=&amp;quot;${1}&amp;quot;&lt;br /&gt;
SRV=&amp;quot;${2}&amp;quot;&lt;br /&gt;
REF=&amp;quot;${3}&amp;quot;&lt;br /&gt;
LOGIN=&amp;quot;${4}&amp;quot;&lt;br /&gt;
PASSWORD_FILE=&amp;quot;${5}&amp;quot;&lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;${6}&amp;quot;&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;${7}&amp;quot;&lt;br /&gt;
TIMEOUT_COUNTER=0&lt;br /&gt;
LOCK_FILE_PATH=&amp;quot;/home/usr1cv8/.1cv8/1C/1cv8/reg_1541/snccntx8e79a393-c2af-4fd7-b25a-af6b5ed19bfa/snccntx.dat&amp;quot;&lt;br /&gt;
#-----------------------------&lt;br /&gt;
export DISPLAY=&amp;quot;${DISPLAY}&amp;quot;&lt;br /&gt;
bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
PASSWORD=`cat ${PASSWORD_FILE} | head -1`&lt;br /&gt;
infobase_suffix=&amp;quot;$(date +%Y-%m-%d-%H-%M-%S).dt&amp;quot;&lt;br /&gt;
TMP_STORAGE=&amp;quot;/opt/1c_backup_scripts/tmp_storage&amp;quot;&lt;br /&gt;
ib_tmp_filepath=&amp;quot;${TMP_STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_tmp_log=&amp;quot;${ib_tmp_filepath}.log&amp;quot;&lt;br /&gt;
ib_filepath=&amp;quot;${STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_log=&amp;quot;${ib_filepath}.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function rotate_backups(){&lt;br /&gt;
filenames_cmd=&amp;quot;${STORAGE}/${REF}*&amp;quot;&lt;br /&gt;
current_unixtime=`date +%s --date=&amp;quot;$(date +%Y-%m-%d) 00:00:00&amp;quot;`&lt;br /&gt;
test_unixtime=$(($current_unixtime-$KEEP_BACKUPS_FOR_LAST_DAYS*60*60*24))&lt;br /&gt;
&lt;br /&gt;
for f in $(/bin/ls $filenames_cmd); do&lt;br /&gt;
#echo &amp;quot;f=$f&amp;quot;&lt;br /&gt;
datetime_from_file=`echo ${f} | awk -F '__' {'print $2'} | awk -F '.' {'print $1'}`&lt;br /&gt;
#echo &amp;quot;datetime_from_file=${datetime_from_file}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#2023-12-24-22-01-02&lt;br /&gt;
Y=`echo ${datetime_from_file} | awk -F '-' {'print $1'}`&lt;br /&gt;
M=`echo ${datetime_from_file} | awk -F '-' {'print $2'}`&lt;br /&gt;
D=`echo ${datetime_from_file} | awk -F '-' {'print $3'}`&lt;br /&gt;
h=`echo ${datetime_from_file} | awk -F '-' {'print $4'}`&lt;br /&gt;
m=`echo ${datetime_from_file} | awk -F '-' {'print $5'}`&lt;br /&gt;
s=`echo ${datetime_from_file} | awk -F '-' {'print $6'}`&lt;br /&gt;
&lt;br /&gt;
unixtime_from_file=`date +%s --date=&amp;quot;${Y}-${M}-${D} ${h}:${m}:${s}&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
if [[ $unixtime_from_file -lt $test_unixtime ]]; then&lt;br /&gt;
  echo &amp;quot;delete file: ${f}&amp;quot;&lt;br /&gt;
  /bin/rm ${f}&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;keep file: ${f}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function wait(){&lt;br /&gt;
&lt;br /&gt;
  if [[ $TIMEOUT_COUNTER -ge $BACKUP_TIMEOUT_SEC ]]; then&lt;br /&gt;
    kill -9 ${1}&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  if [ ! -d /proc/${1}/ ]; then&lt;br /&gt;
    nice_text=&amp;quot;Выгрузка информационной базы успешно завершена&amp;quot;&lt;br /&gt;
    res_text=$(grep -o -i &amp;quot;${nice_text}&amp;quot; ${ib_tmp_log})&lt;br /&gt;
&lt;br /&gt;
    # start apache2&lt;br /&gt;
    sudo systemctl start httpd2&lt;br /&gt;
&lt;br /&gt;
    if [ &amp;quot;${res_text}&amp;quot; = &amp;quot;${nice_text}&amp;quot; ]; then&lt;br /&gt;
      /bin/cp ${ib_tmp_filepath} ${ib_filepath} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_filepath}&lt;br /&gt;
      /bin/cp ${ib_tmp_log} ${ib_log} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_log}&lt;br /&gt;
      #echo &amp;quot;TEST: ${ib_filepath} AND ${ib_log}&amp;quot;&lt;br /&gt;
      rotate_backups&lt;br /&gt;
      exit 0&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    exit 1&lt;br /&gt;
  fi&lt;br /&gt;
  #echo &amp;quot;pid alive: ${1}&amp;quot;&lt;br /&gt;
  sleep 1&lt;br /&gt;
  TIMEOUT_COUNTER=$(($TIMEOUT_COUNTER+1))&lt;br /&gt;
  wait ${1}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# prepare tmp storage&lt;br /&gt;
[ ! -d ${TMP_STORAGE} ] &amp;amp;&amp;amp; sudo mkdir &amp;quot;${TMP_STORAGE}&amp;quot; &amp;amp;&amp;amp; sudo chown administrator: &amp;quot;${TMP_STORAGE}&amp;quot; -R&lt;br /&gt;
&lt;br /&gt;
# stop apache2&lt;br /&gt;
sudo systemctl stop httpd2&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
# reset srv1cv8 sessions&lt;br /&gt;
sudo systemctl stop srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
sudo /bin/rm -f &amp;quot;${LOCK_FILE_PATH}&amp;quot;&lt;br /&gt;
sudo systemctl start srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
DISPLAY=:0 XAUTHORITY=/home/administrator/.Xauthority ${bin1c} CONFIG /N &amp;quot;${LOGIN}&amp;quot; /P &amp;quot;${PASSWORD}&amp;quot; /S &amp;quot;${SRV}/${REF}&amp;quot; /DumpIB &amp;quot;${ib_tmp_filepath}&amp;quot; /OUT &amp;quot;${ib_tmp_log}&amp;quot; &amp;amp;&lt;br /&gt;
main_process_pid=$!&lt;br /&gt;
&lt;br /&gt;
wait ${main_process_pid}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup_infobase_1c_generic.sh&lt;br /&gt;
&lt;br /&gt;
===Скрипт для резервирования конкретной базы данных===&lt;br /&gt;
Данный скрипт представляет из себя обёртку над выше приведённым скриптом, с заданием конкретных параметров резервирования&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup__my_super_infobase.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
### PARAMETERS ###&lt;br /&gt;
STORAGE=&amp;quot;/mnt/storage/my-1c-host-backups&amp;quot; # каталог для сохранения резервных копий&lt;br /&gt;
SRV=&amp;quot;my-1c-host&amp;quot;                          # хост, на котором работает платформа &amp;quot;1С: Предприятие&amp;quot;&lt;br /&gt;
REF=&amp;quot;my_super_infobase&amp;quot;                   # имя базы данных, которую резервируем&lt;br /&gt;
LOGIN=&amp;quot;backupuser&amp;quot;                        # 1с-пользователь, которому разрешено резервировать базу данных&lt;br /&gt;
PASSWORD_FILE=&amp;quot;/home/administrator/.1c-cluster-infobases-backup.pass&amp;quot; # в этом файле должен находиться только пароль от 1с-пользоателя &lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;2&amp;quot;            # сохранить резервные копии только за эти несколько последных дней (в текущем примере - за 2 последних дня)&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;300&amp;quot;                  # таймаут, в течение которого разрешено работать процессу резервирования (процессу платформы &amp;quot;1С: Предприятие&amp;quot;. Если за этот таймаут процесс не успел сделать резервную копию, то он снимается с выполнения)&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### BOT PARAMETERS&lt;br /&gt;
TELEGRAM_BOT_TOKEN=&amp;quot;&amp;quot;             # сюда нужно вписать токен телеграм-бота, который будет отсылать уведомления&lt;br /&gt;
TELEGRAM_DESTINATION_GROUP_ID=&amp;quot;&amp;quot;  # сюда нужно вписать идентификатор телеграм-пользователя или телеграм-группы (не забывайте про минус в начале, если это идентификатор группы), в которого (или в которую, если это группа) бот будет писать сообщения&lt;br /&gt;
&lt;br /&gt;
function send_message_telegram(){&lt;br /&gt;
#exit 0  # раскомментируйте эту строчку, если отсылка сообщений телеграм-ботом не нужна (следовательно, и параметры дя бота при этом можно не задавать)&lt;br /&gt;
message=${1}&lt;br /&gt;
curl -s -X POST \&lt;br /&gt;
     -H 'Content-Type: application/json' \&lt;br /&gt;
     -d &amp;quot;{\&amp;quot;chat_id\&amp;quot;: \&amp;quot;${TELEGRAM_DESTINATION_GROUP_ID}\&amp;quot;, \&amp;quot;text\&amp;quot;: \&amp;quot;${message}\&amp;quot;, \&amp;quot;disable_notification\&amp;quot;: true}&amp;quot; \&lt;br /&gt;
     https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage &amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### START ###&lt;br /&gt;
BASE=`dirname ${0}`&lt;br /&gt;
${BASE}/backup_infobase_1c_generic.sh &amp;quot;${STORAGE}&amp;quot; &amp;quot;${SRV}&amp;quot; &amp;quot;${REF}&amp;quot; &amp;quot;${LOGIN}&amp;quot; &amp;quot;${PASSWORD_FILE}&amp;quot; &amp;quot;${KEEP_BACKUPS_FOR_LAST_DAYS}&amp;quot; &amp;quot;${BACKUP_TIMEOUT_SEC}&amp;quot;&lt;br /&gt;
res=$?&lt;br /&gt;
&lt;br /&gt;
if [ ${res} -eq 0 ]; then&lt;br /&gt;
send_message_telegram &amp;quot;[Успешно]\nРезервное копирование информационной базы '${REF}' выполнено успешно&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
send_message_telegram &amp;quot;[Ошибка]\nРезервное копирование информационной базы '${REF}' не выполнено&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&lt;br /&gt;
===Ставим задачу для планировщика cron===&lt;br /&gt;
&lt;br /&gt;
Под пользователем&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
в терминале открываем временный файл для настройки crontab&lt;br /&gt;
&lt;br /&gt;
 EDITOR=nano crontab -e&lt;br /&gt;
&lt;br /&gt;
в результате редактором&lt;br /&gt;
&lt;br /&gt;
 nano&lt;br /&gt;
&lt;br /&gt;
будет открыт временный файл для установки параметров планировщика для текущего пользователя. Отредактировав и сохранив (Ctrl+O - Enter) изменения в этом файле и закрыв редактор (Ctrl+X) будет сконфигурирован планировщик для текущего пользователя.&lt;br /&gt;
&lt;br /&gt;
Проверить корректность заданных параметров планировщика можно выполнением команды&lt;br /&gt;
&lt;br /&gt;
 crontab -l&lt;br /&gt;
&lt;br /&gt;
В случае, если планировщик был сконфигурирован на запуск скрипта резервного копирования каждые сутки с 23:01, вывод команды проверки должен быть примерно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#minute (0-59),&lt;br /&gt;
#|	hour (0-23),&lt;br /&gt;
#|	|	day of the month (1-31),&lt;br /&gt;
#|	|	|	month of the year (1-12),&lt;br /&gt;
#|	|	|	|	day of the week (0-6 with 0=Sunday).&lt;br /&gt;
#|	|	|	|	|	commands&lt;br /&gt;
1       23	*	*	*	/opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11361</id>
		<title>1c</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11361"/>
		<updated>2026-06-12T21:36:24Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: /* Проверяем публикацию */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=В GNU/Linux=&lt;br /&gt;
&lt;br /&gt;
==Установка учебной платформы 8.5.x на ОС Альт Стартеркит p11 GNOME==&lt;br /&gt;
&lt;br /&gt;
===Обновить ОС и ядро===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get update -y &amp;amp;&amp;amp; apt-get dist-upgrade -y &amp;amp;&amp;amp; update-kernel -y&lt;br /&gt;
&lt;br /&gt;
===Поставить пакеты===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get install -f alt-tour firefox libwebkit2gtk 1c-preinstall-full libglui&lt;br /&gt;
&lt;br /&gt;
===Включить sudo su===&lt;br /&gt;
&lt;br /&gt;
Раскоментировать в файле:&lt;br /&gt;
&lt;br /&gt;
 /etc/sudoers&lt;br /&gt;
&lt;br /&gt;
строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
или строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) NOPASSWD: ALL&lt;br /&gt;
&lt;br /&gt;
(если необходимо выполнять sudo su без пароля)&lt;br /&gt;
&lt;br /&gt;
===Установить платформу===&lt;br /&gt;
&lt;br /&gt;
Предполагается, что есть файл установки платформы:&lt;br /&gt;
&lt;br /&gt;
 setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Тогда установка осуществляетс следующим образом:&lt;br /&gt;
&lt;br /&gt;
 chmod +x setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
 sudo ./setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Далее следуем инструкциям установщика. В установщике необходимо выбрать пункт &amp;quot;Установить ярлыки&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Установщик сам переключится в режим текстового интерфейса, если не найдёт дисплей (например, при установке по ssh). А вообще он имеет графический интерфейс...&lt;br /&gt;
&lt;br /&gt;
===Починить запуск платформы (актуально для ОС Альт веток p10 и p11 как минимум)===&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Получилось? Если да, то странно... Должна быть такая ошибка:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libicuuc.so.74)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjxl.so.0.11)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_12.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_13.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
&lt;br /&gt;
Не такая ошибка? Если да, то вы точно все пункты до этого выполнили (точно пакеты все установлены, которые выше в команде установки пакетовв перечислены)?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если ошибка такая, то чиним:&lt;br /&gt;
&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить ещё раз:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Всё должно работать. Теперь можно запускать платформу посредством ярлыков (кнопок меню приложений)&lt;br /&gt;
&lt;br /&gt;
По прежнему не запускается? Если да, то спешим на встречу новым приключениям!&lt;br /&gt;
&lt;br /&gt;
===Переопределить настройки по умолчанию для ОС Альт===&lt;br /&gt;
&lt;br /&gt;
Перезагрузиться&lt;br /&gt;
&lt;br /&gt;
====Каталог для файловых баз данных платформы 1С и sgid-bit====&lt;br /&gt;
&lt;br /&gt;
Поскольку полный путь до каталога с файловой базой данных будет фигурировать в конфигурационных файлах веб-сервера, его рекомендуется сделать отличным от пути по умолчанию, который предлагает платформа 1С.&lt;br /&gt;
&lt;br /&gt;
Например, так:&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/bases&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При публикации базы данных через веб-сервер необходимо чтобы у процесса веб-сервера, запущенного от пользователя&lt;br /&gt;
&lt;br /&gt;
 apache2&lt;br /&gt;
&lt;br /&gt;
был доступ на чтение и запись в каталог с базой данных конфигурации 1С.&lt;br /&gt;
&lt;br /&gt;
Один из вариантов это сделать следующий:&lt;br /&gt;
&lt;br /&gt;
1. Разрешаем членам группы-владельца каталога чтение и запись&lt;br /&gt;
&lt;br /&gt;
 chmod g+rwx ~/bases -R&lt;br /&gt;
&lt;br /&gt;
2. Устанавливаем sgid бит на каталог&lt;br /&gt;
&lt;br /&gt;
 chmod g+s ~/bases -R&lt;br /&gt;
&lt;br /&gt;
3. Добавляем пользователя apache2 в группу-владельца каталога&lt;br /&gt;
&lt;br /&gt;
 sudo usermod -aG user apache2&lt;br /&gt;
&lt;br /&gt;
==Публикация REST/Odata на веб-сервере==&lt;br /&gt;
&lt;br /&gt;
Предполагается что до этого были выполнены все действия в предыдущем разделе...&lt;br /&gt;
&lt;br /&gt;
===Устанавливаем и включаем веб-сервер apache2===&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install -y apache2&lt;br /&gt;
 sudo systemctl enable --now httpd2&lt;br /&gt;
&lt;br /&gt;
===Создаём симлинк для httpd2===&lt;br /&gt;
&lt;br /&gt;
Для скриптов платформы 1С это важно...&lt;br /&gt;
&lt;br /&gt;
 ln -s /sbin/httpd2 /sbin/httpd&lt;br /&gt;
&lt;br /&gt;
===Публикуем командой===&lt;br /&gt;
&lt;br /&gt;
Сначала создаём файл (оно само не может):&lt;br /&gt;
&lt;br /&gt;
 sudo touch /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
Потом публикуем:&lt;br /&gt;
&lt;br /&gt;
 sudo HOME=/home/user /opt/1cv8t/x86_64/8.5.1.1150/webinstt -apache24 -wsdir odata_base -dir /var/www/odata_base -connstr &amp;quot;File=/home/user/bases/base1;&amp;quot; -confPath /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
В ответ должно прийти что-то типа этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация выполнена&lt;br /&gt;
&lt;br /&gt;
или этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация обновлена&lt;br /&gt;
&lt;br /&gt;
Примерное содержимое файла в контексте конфигурационных файлов веб-сервера apache2:&lt;br /&gt;
&lt;br /&gt;
 cat /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LoadModule _1cws_module &amp;quot;/opt/1cv8t/x86_64/8.5.1.1150/wsap24t.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 1c publication&lt;br /&gt;
Alias &amp;quot;/odata_base&amp;quot; &amp;quot;/var/www/odata_base/&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/odata_base/&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride All&lt;br /&gt;
    Options None&lt;br /&gt;
    Require all granted&lt;br /&gt;
    SetHandler 1c-application&lt;br /&gt;
    ManagedApplicationDescriptor &amp;quot;/var/www/odata_base/default.vrd&amp;quot;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Исправляем параметр в конфигурации сервиса===&lt;br /&gt;
&lt;br /&gt;
Исправляем значение параметра:&lt;br /&gt;
&lt;br /&gt;
 sed -i 's/ProtectHome=yes/ProtectHome=no/g' /lib/systemd/system/httpd2.service&lt;br /&gt;
&lt;br /&gt;
После этого перезагрузим демона systemd&lt;br /&gt;
&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R apache2: /var/www/odata_base&lt;br /&gt;
chmod -R 755 /var/www/odata_base&lt;br /&gt;
&lt;br /&gt;
chmod a+x /home/user/&lt;br /&gt;
chmod a+x /home/user/bases/&lt;br /&gt;
&lt;br /&gt;
chown -R apache2:apache2 /home/user/bases/base1/&lt;br /&gt;
chmod -R 775 /home/user/bases/base1/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Перезапускаем веб-сервер===&lt;br /&gt;
&lt;br /&gt;
 systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
===Проверяем публикацию===&lt;br /&gt;
&lt;br /&gt;
Идём браузером по адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако данная веб-страница возвращает внутреннюю ошибку платформы 1С. По всей видимости, в текущем режиме совместимости конфигурации графический модуль для отображения данного стандартного окна не генерируется веб-сервером (отсутствуют необходимые JS-скрипты для рендеринга интерфейса).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&amp;quot;#exception&amp;quot;:&amp;quot;{http://v8.1c.ru/8.2/virtual-resource-system}Exception&amp;quot;,&amp;quot;exception&amp;quot;:{&amp;quot;clsid&amp;quot;:&amp;quot;580392e6-ba49-4280-ac67-fcd6f2180121&amp;quot;,&amp;quot;reason&amp;quot;:404,&amp;quot;descr&amp;quot;:&amp;quot;HTTP: Not found\nError executing the query GET to resource /en/scripts/mod_bootstrap_bootstrap.js:&amp;quot;,&amp;quot;category&amp;quot;:&amp;quot;00000000000000000000000000&amp;quot;,&amp;quot;creationStack&amp;quot;:&amp;quot;mngsrvt:0x0000000000252DF5 mngsrvt:0x000000000024F8F4 vrsbaset:0x00000000006D7791 vrsbaset:0x00000000006540C5 vrsbaset:0x00000000006EBDE6 vrsbaset:0x00000000006D2A9C vrsbaset:0x00000000006EC4A9 vrsbaset:0x00000000006ED4A0 core85t:0x00000000008D4EBF core85t:0x00000000006B238C libc.so:0x0000000000000000 libc.so:0x0000000000000000 &amp;quot;}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Но это не помешает нам работать с OData.&lt;br /&gt;
&lt;br /&gt;
==Автоматизация резервного копирования информационных баз==&lt;br /&gt;
&lt;br /&gt;
Предполагается, что платформа &amp;quot;1С Предприятие&amp;quot; работает на GNU/Linux системе и скрипт резервного копирования выполняется от пользователя&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
, графическое окружение которого автоматически запускается после загрузки компьютера.&lt;br /&gt;
&lt;br /&gt;
Дело в том, что по каким-то причинам, разработчики платформы &amp;quot;1С Предприятие&amp;quot; не заложили в систему запуск резервного копирования в headless-режиме, поэтому платформе необходим дисплей X-сервера.&lt;br /&gt;
&lt;br /&gt;
Также предполагается, что файл с паролем от пользователя платформы &amp;quot;1С Предприятие&amp;quot;, которому разрешено выполнять резервное копирование, хранится в файле&lt;br /&gt;
&lt;br /&gt;
 /home/administrator/.1c-cluster-infobases-backup.pass&lt;br /&gt;
&lt;br /&gt;
и рекомендуемые права на этот файл&lt;br /&gt;
&lt;br /&gt;
 0400&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Подготовка каталога для скриптов===&lt;br /&gt;
&lt;br /&gt;
 mkdir /opt/1c_backup_scripts&lt;br /&gt;
&lt;br /&gt;
===Базовый скрипт===&lt;br /&gt;
&lt;br /&gt;
При необходимости, в тексте скрипта, отредактируйте строчку&lt;br /&gt;
&lt;br /&gt;
 bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
, указав путь до конкретной версии платформы &amp;quot;1С Предприятие&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже предоставлен текст, который можно выделить, скопировать в текстовый редактор, при необходимости поправить, затем весь этот текст можно бросить в консоль для создания файла посредством heredoc-синтаксиса:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup_infobase_1c_generic.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export LANG=ru_RU.UTF-8&lt;br /&gt;
&lt;br /&gt;
NON_ROOT_USER=&amp;quot;administrator&amp;quot;&lt;br /&gt;
DISPLAY=&amp;quot;:0&amp;quot;&lt;br /&gt;
STORAGE=&amp;quot;${1}&amp;quot;&lt;br /&gt;
SRV=&amp;quot;${2}&amp;quot;&lt;br /&gt;
REF=&amp;quot;${3}&amp;quot;&lt;br /&gt;
LOGIN=&amp;quot;${4}&amp;quot;&lt;br /&gt;
PASSWORD_FILE=&amp;quot;${5}&amp;quot;&lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;${6}&amp;quot;&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;${7}&amp;quot;&lt;br /&gt;
TIMEOUT_COUNTER=0&lt;br /&gt;
LOCK_FILE_PATH=&amp;quot;/home/usr1cv8/.1cv8/1C/1cv8/reg_1541/snccntx8e79a393-c2af-4fd7-b25a-af6b5ed19bfa/snccntx.dat&amp;quot;&lt;br /&gt;
#-----------------------------&lt;br /&gt;
export DISPLAY=&amp;quot;${DISPLAY}&amp;quot;&lt;br /&gt;
bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
PASSWORD=`cat ${PASSWORD_FILE} | head -1`&lt;br /&gt;
infobase_suffix=&amp;quot;$(date +%Y-%m-%d-%H-%M-%S).dt&amp;quot;&lt;br /&gt;
TMP_STORAGE=&amp;quot;/opt/1c_backup_scripts/tmp_storage&amp;quot;&lt;br /&gt;
ib_tmp_filepath=&amp;quot;${TMP_STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_tmp_log=&amp;quot;${ib_tmp_filepath}.log&amp;quot;&lt;br /&gt;
ib_filepath=&amp;quot;${STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_log=&amp;quot;${ib_filepath}.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function rotate_backups(){&lt;br /&gt;
filenames_cmd=&amp;quot;${STORAGE}/${REF}*&amp;quot;&lt;br /&gt;
current_unixtime=`date +%s --date=&amp;quot;$(date +%Y-%m-%d) 00:00:00&amp;quot;`&lt;br /&gt;
test_unixtime=$(($current_unixtime-$KEEP_BACKUPS_FOR_LAST_DAYS*60*60*24))&lt;br /&gt;
&lt;br /&gt;
for f in $(/bin/ls $filenames_cmd); do&lt;br /&gt;
#echo &amp;quot;f=$f&amp;quot;&lt;br /&gt;
datetime_from_file=`echo ${f} | awk -F '__' {'print $2'} | awk -F '.' {'print $1'}`&lt;br /&gt;
#echo &amp;quot;datetime_from_file=${datetime_from_file}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#2023-12-24-22-01-02&lt;br /&gt;
Y=`echo ${datetime_from_file} | awk -F '-' {'print $1'}`&lt;br /&gt;
M=`echo ${datetime_from_file} | awk -F '-' {'print $2'}`&lt;br /&gt;
D=`echo ${datetime_from_file} | awk -F '-' {'print $3'}`&lt;br /&gt;
h=`echo ${datetime_from_file} | awk -F '-' {'print $4'}`&lt;br /&gt;
m=`echo ${datetime_from_file} | awk -F '-' {'print $5'}`&lt;br /&gt;
s=`echo ${datetime_from_file} | awk -F '-' {'print $6'}`&lt;br /&gt;
&lt;br /&gt;
unixtime_from_file=`date +%s --date=&amp;quot;${Y}-${M}-${D} ${h}:${m}:${s}&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
if [[ $unixtime_from_file -lt $test_unixtime ]]; then&lt;br /&gt;
  echo &amp;quot;delete file: ${f}&amp;quot;&lt;br /&gt;
  /bin/rm ${f}&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;keep file: ${f}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function wait(){&lt;br /&gt;
&lt;br /&gt;
  if [[ $TIMEOUT_COUNTER -ge $BACKUP_TIMEOUT_SEC ]]; then&lt;br /&gt;
    kill -9 ${1}&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  if [ ! -d /proc/${1}/ ]; then&lt;br /&gt;
    nice_text=&amp;quot;Выгрузка информационной базы успешно завершена&amp;quot;&lt;br /&gt;
    res_text=$(grep -o -i &amp;quot;${nice_text}&amp;quot; ${ib_tmp_log})&lt;br /&gt;
&lt;br /&gt;
    # start apache2&lt;br /&gt;
    sudo systemctl start httpd2&lt;br /&gt;
&lt;br /&gt;
    if [ &amp;quot;${res_text}&amp;quot; = &amp;quot;${nice_text}&amp;quot; ]; then&lt;br /&gt;
      /bin/cp ${ib_tmp_filepath} ${ib_filepath} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_filepath}&lt;br /&gt;
      /bin/cp ${ib_tmp_log} ${ib_log} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_log}&lt;br /&gt;
      #echo &amp;quot;TEST: ${ib_filepath} AND ${ib_log}&amp;quot;&lt;br /&gt;
      rotate_backups&lt;br /&gt;
      exit 0&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    exit 1&lt;br /&gt;
  fi&lt;br /&gt;
  #echo &amp;quot;pid alive: ${1}&amp;quot;&lt;br /&gt;
  sleep 1&lt;br /&gt;
  TIMEOUT_COUNTER=$(($TIMEOUT_COUNTER+1))&lt;br /&gt;
  wait ${1}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# prepare tmp storage&lt;br /&gt;
[ ! -d ${TMP_STORAGE} ] &amp;amp;&amp;amp; sudo mkdir &amp;quot;${TMP_STORAGE}&amp;quot; &amp;amp;&amp;amp; sudo chown administrator: &amp;quot;${TMP_STORAGE}&amp;quot; -R&lt;br /&gt;
&lt;br /&gt;
# stop apache2&lt;br /&gt;
sudo systemctl stop httpd2&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
# reset srv1cv8 sessions&lt;br /&gt;
sudo systemctl stop srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
sudo /bin/rm -f &amp;quot;${LOCK_FILE_PATH}&amp;quot;&lt;br /&gt;
sudo systemctl start srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
DISPLAY=:0 XAUTHORITY=/home/administrator/.Xauthority ${bin1c} CONFIG /N &amp;quot;${LOGIN}&amp;quot; /P &amp;quot;${PASSWORD}&amp;quot; /S &amp;quot;${SRV}/${REF}&amp;quot; /DumpIB &amp;quot;${ib_tmp_filepath}&amp;quot; /OUT &amp;quot;${ib_tmp_log}&amp;quot; &amp;amp;&lt;br /&gt;
main_process_pid=$!&lt;br /&gt;
&lt;br /&gt;
wait ${main_process_pid}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup_infobase_1c_generic.sh&lt;br /&gt;
&lt;br /&gt;
===Скрипт для резервирования конкретной базы данных===&lt;br /&gt;
Данный скрипт представляет из себя обёртку над выше приведённым скриптом, с заданием конкретных параметров резервирования&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup__my_super_infobase.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
### PARAMETERS ###&lt;br /&gt;
STORAGE=&amp;quot;/mnt/storage/my-1c-host-backups&amp;quot; # каталог для сохранения резервных копий&lt;br /&gt;
SRV=&amp;quot;my-1c-host&amp;quot;                          # хост, на котором работает платформа &amp;quot;1С: Предприятие&amp;quot;&lt;br /&gt;
REF=&amp;quot;my_super_infobase&amp;quot;                   # имя базы данных, которую резервируем&lt;br /&gt;
LOGIN=&amp;quot;backupuser&amp;quot;                        # 1с-пользователь, которому разрешено резервировать базу данных&lt;br /&gt;
PASSWORD_FILE=&amp;quot;/home/administrator/.1c-cluster-infobases-backup.pass&amp;quot; # в этом файле должен находиться только пароль от 1с-пользоателя &lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;2&amp;quot;            # сохранить резервные копии только за эти несколько последных дней (в текущем примере - за 2 последних дня)&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;300&amp;quot;                  # таймаут, в течение которого разрешено работать процессу резервирования (процессу платформы &amp;quot;1С: Предприятие&amp;quot;. Если за этот таймаут процесс не успел сделать резервную копию, то он снимается с выполнения)&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### BOT PARAMETERS&lt;br /&gt;
TELEGRAM_BOT_TOKEN=&amp;quot;&amp;quot;             # сюда нужно вписать токен телеграм-бота, который будет отсылать уведомления&lt;br /&gt;
TELEGRAM_DESTINATION_GROUP_ID=&amp;quot;&amp;quot;  # сюда нужно вписать идентификатор телеграм-пользователя или телеграм-группы (не забывайте про минус в начале, если это идентификатор группы), в которого (или в которую, если это группа) бот будет писать сообщения&lt;br /&gt;
&lt;br /&gt;
function send_message_telegram(){&lt;br /&gt;
#exit 0  # раскомментируйте эту строчку, если отсылка сообщений телеграм-ботом не нужна (следовательно, и параметры дя бота при этом можно не задавать)&lt;br /&gt;
message=${1}&lt;br /&gt;
curl -s -X POST \&lt;br /&gt;
     -H 'Content-Type: application/json' \&lt;br /&gt;
     -d &amp;quot;{\&amp;quot;chat_id\&amp;quot;: \&amp;quot;${TELEGRAM_DESTINATION_GROUP_ID}\&amp;quot;, \&amp;quot;text\&amp;quot;: \&amp;quot;${message}\&amp;quot;, \&amp;quot;disable_notification\&amp;quot;: true}&amp;quot; \&lt;br /&gt;
     https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage &amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### START ###&lt;br /&gt;
BASE=`dirname ${0}`&lt;br /&gt;
${BASE}/backup_infobase_1c_generic.sh &amp;quot;${STORAGE}&amp;quot; &amp;quot;${SRV}&amp;quot; &amp;quot;${REF}&amp;quot; &amp;quot;${LOGIN}&amp;quot; &amp;quot;${PASSWORD_FILE}&amp;quot; &amp;quot;${KEEP_BACKUPS_FOR_LAST_DAYS}&amp;quot; &amp;quot;${BACKUP_TIMEOUT_SEC}&amp;quot;&lt;br /&gt;
res=$?&lt;br /&gt;
&lt;br /&gt;
if [ ${res} -eq 0 ]; then&lt;br /&gt;
send_message_telegram &amp;quot;[Успешно]\nРезервное копирование информационной базы '${REF}' выполнено успешно&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
send_message_telegram &amp;quot;[Ошибка]\nРезервное копирование информационной базы '${REF}' не выполнено&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&lt;br /&gt;
===Ставим задачу для планировщика cron===&lt;br /&gt;
&lt;br /&gt;
Под пользователем&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
в терминале открываем временный файл для настройки crontab&lt;br /&gt;
&lt;br /&gt;
 EDITOR=nano crontab -e&lt;br /&gt;
&lt;br /&gt;
в результате редактором&lt;br /&gt;
&lt;br /&gt;
 nano&lt;br /&gt;
&lt;br /&gt;
будет открыт временный файл для установки параметров планировщика для текущего пользователя. Отредактировав и сохранив (Ctrl+O - Enter) изменения в этом файле и закрыв редактор (Ctrl+X) будет сконфигурирован планировщик для текущего пользователя.&lt;br /&gt;
&lt;br /&gt;
Проверить корректность заданных параметров планировщика можно выполнением команды&lt;br /&gt;
&lt;br /&gt;
 crontab -l&lt;br /&gt;
&lt;br /&gt;
В случае, если планировщик был сконфигурирован на запуск скрипта резервного копирования каждые сутки с 23:01, вывод команды проверки должен быть примерно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#minute (0-59),&lt;br /&gt;
#|	hour (0-23),&lt;br /&gt;
#|	|	day of the month (1-31),&lt;br /&gt;
#|	|	|	month of the year (1-12),&lt;br /&gt;
#|	|	|	|	day of the week (0-6 with 0=Sunday).&lt;br /&gt;
#|	|	|	|	|	commands&lt;br /&gt;
1       23	*	*	*	/opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11360</id>
		<title>1c</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11360"/>
		<updated>2026-06-12T21:35:26Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: /* Проверяем публикацию */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=В GNU/Linux=&lt;br /&gt;
&lt;br /&gt;
==Установка учебной платформы 8.5.x на ОС Альт Стартеркит p11 GNOME==&lt;br /&gt;
&lt;br /&gt;
===Обновить ОС и ядро===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get update -y &amp;amp;&amp;amp; apt-get dist-upgrade -y &amp;amp;&amp;amp; update-kernel -y&lt;br /&gt;
&lt;br /&gt;
===Поставить пакеты===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get install -f alt-tour firefox libwebkit2gtk 1c-preinstall-full libglui&lt;br /&gt;
&lt;br /&gt;
===Включить sudo su===&lt;br /&gt;
&lt;br /&gt;
Раскоментировать в файле:&lt;br /&gt;
&lt;br /&gt;
 /etc/sudoers&lt;br /&gt;
&lt;br /&gt;
строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
или строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) NOPASSWD: ALL&lt;br /&gt;
&lt;br /&gt;
(если необходимо выполнять sudo su без пароля)&lt;br /&gt;
&lt;br /&gt;
===Установить платформу===&lt;br /&gt;
&lt;br /&gt;
Предполагается, что есть файл установки платформы:&lt;br /&gt;
&lt;br /&gt;
 setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Тогда установка осуществляетс следующим образом:&lt;br /&gt;
&lt;br /&gt;
 chmod +x setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
 sudo ./setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Далее следуем инструкциям установщика. В установщике необходимо выбрать пункт &amp;quot;Установить ярлыки&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Установщик сам переключится в режим текстового интерфейса, если не найдёт дисплей (например, при установке по ssh). А вообще он имеет графический интерфейс...&lt;br /&gt;
&lt;br /&gt;
===Починить запуск платформы (актуально для ОС Альт веток p10 и p11 как минимум)===&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Получилось? Если да, то странно... Должна быть такая ошибка:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libicuuc.so.74)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjxl.so.0.11)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_12.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_13.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
&lt;br /&gt;
Не такая ошибка? Если да, то вы точно все пункты до этого выполнили (точно пакеты все установлены, которые выше в команде установки пакетовв перечислены)?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если ошибка такая, то чиним:&lt;br /&gt;
&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить ещё раз:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Всё должно работать. Теперь можно запускать платформу посредством ярлыков (кнопок меню приложений)&lt;br /&gt;
&lt;br /&gt;
По прежнему не запускается? Если да, то спешим на встречу новым приключениям!&lt;br /&gt;
&lt;br /&gt;
===Переопределить настройки по умолчанию для ОС Альт===&lt;br /&gt;
&lt;br /&gt;
Перезагрузиться&lt;br /&gt;
&lt;br /&gt;
====Каталог для файловых баз данных платформы 1С и sgid-bit====&lt;br /&gt;
&lt;br /&gt;
Поскольку полный путь до каталога с файловой базой данных будет фигурировать в конфигурационных файлах веб-сервера, его рекомендуется сделать отличным от пути по умолчанию, который предлагает платформа 1С.&lt;br /&gt;
&lt;br /&gt;
Например, так:&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/bases&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При публикации базы данных через веб-сервер необходимо чтобы у процесса веб-сервера, запущенного от пользователя&lt;br /&gt;
&lt;br /&gt;
 apache2&lt;br /&gt;
&lt;br /&gt;
был доступ на чтение и запись в каталог с базой данных конфигурации 1С.&lt;br /&gt;
&lt;br /&gt;
Один из вариантов это сделать следующий:&lt;br /&gt;
&lt;br /&gt;
1. Разрешаем членам группы-владельца каталога чтение и запись&lt;br /&gt;
&lt;br /&gt;
 chmod g+rwx ~/bases -R&lt;br /&gt;
&lt;br /&gt;
2. Устанавливаем sgid бит на каталог&lt;br /&gt;
&lt;br /&gt;
 chmod g+s ~/bases -R&lt;br /&gt;
&lt;br /&gt;
3. Добавляем пользователя apache2 в группу-владельца каталога&lt;br /&gt;
&lt;br /&gt;
 sudo usermod -aG user apache2&lt;br /&gt;
&lt;br /&gt;
==Публикация REST/Odata на веб-сервере==&lt;br /&gt;
&lt;br /&gt;
Предполагается что до этого были выполнены все действия в предыдущем разделе...&lt;br /&gt;
&lt;br /&gt;
===Устанавливаем и включаем веб-сервер apache2===&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install -y apache2&lt;br /&gt;
 sudo systemctl enable --now httpd2&lt;br /&gt;
&lt;br /&gt;
===Создаём симлинк для httpd2===&lt;br /&gt;
&lt;br /&gt;
Для скриптов платформы 1С это важно...&lt;br /&gt;
&lt;br /&gt;
 ln -s /sbin/httpd2 /sbin/httpd&lt;br /&gt;
&lt;br /&gt;
===Публикуем командой===&lt;br /&gt;
&lt;br /&gt;
Сначала создаём файл (оно само не может):&lt;br /&gt;
&lt;br /&gt;
 sudo touch /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
Потом публикуем:&lt;br /&gt;
&lt;br /&gt;
 sudo HOME=/home/user /opt/1cv8t/x86_64/8.5.1.1150/webinstt -apache24 -wsdir odata_base -dir /var/www/odata_base -connstr &amp;quot;File=/home/user/bases/base1;&amp;quot; -confPath /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
В ответ должно прийти что-то типа этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация выполнена&lt;br /&gt;
&lt;br /&gt;
или этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация обновлена&lt;br /&gt;
&lt;br /&gt;
Примерное содержимое файла в контексте конфигурационных файлов веб-сервера apache2:&lt;br /&gt;
&lt;br /&gt;
 cat /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LoadModule _1cws_module &amp;quot;/opt/1cv8t/x86_64/8.5.1.1150/wsap24t.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 1c publication&lt;br /&gt;
Alias &amp;quot;/odata_base&amp;quot; &amp;quot;/var/www/odata_base/&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/odata_base/&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride All&lt;br /&gt;
    Options None&lt;br /&gt;
    Require all granted&lt;br /&gt;
    SetHandler 1c-application&lt;br /&gt;
    ManagedApplicationDescriptor &amp;quot;/var/www/odata_base/default.vrd&amp;quot;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Исправляем параметр в конфигурации сервиса===&lt;br /&gt;
&lt;br /&gt;
Исправляем значение параметра:&lt;br /&gt;
&lt;br /&gt;
 sed -i 's/ProtectHome=yes/ProtectHome=no/g' /lib/systemd/system/httpd2.service&lt;br /&gt;
&lt;br /&gt;
После этого перезагрузим демона systemd&lt;br /&gt;
&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R apache2: /var/www/odata_base&lt;br /&gt;
chmod -R 755 /var/www/odata_base&lt;br /&gt;
&lt;br /&gt;
chmod a+x /home/user/&lt;br /&gt;
chmod a+x /home/user/bases/&lt;br /&gt;
&lt;br /&gt;
chown -R apache2:apache2 /home/user/bases/base1/&lt;br /&gt;
chmod -R 775 /home/user/bases/base1/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Перезапускаем веб-сервер===&lt;br /&gt;
&lt;br /&gt;
 systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
===Проверяем публикацию===&lt;br /&gt;
&lt;br /&gt;
Идём браузером по адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost/odata_base/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Но данная страница выдает ошибку, веб-версию 1С. Как мне кажется, разработчики просто выпелили .js файлы, необходимые для отрисовки окна.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&amp;quot;#exception&amp;quot;:&amp;quot;{http://v8.1c.ru/8.2/virtual-resource-system}Exception&amp;quot;,&amp;quot;exception&amp;quot;:{&amp;quot;clsid&amp;quot;:&amp;quot;580392e6-ba49-4280-ac67-fcd6f2180121&amp;quot;,&amp;quot;reason&amp;quot;:404,&amp;quot;descr&amp;quot;:&amp;quot;HTTP: Not found\nError executing the query GET to resource /en/scripts/mod_bootstrap_bootstrap.js:&amp;quot;,&amp;quot;category&amp;quot;:&amp;quot;00000000000000000000000000&amp;quot;,&amp;quot;creationStack&amp;quot;:&amp;quot;mngsrvt:0x0000000000252DF5 mngsrvt:0x000000000024F8F4 vrsbaset:0x00000000006D7791 vrsbaset:0x00000000006540C5 vrsbaset:0x00000000006EBDE6 vrsbaset:0x00000000006D2A9C vrsbaset:0x00000000006EC4A9 vrsbaset:0x00000000006ED4A0 core85t:0x00000000008D4EBF core85t:0x00000000006B238C libc.so:0x0000000000000000 libc.so:0x0000000000000000 &amp;quot;}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Но это не помешает нам работать с OData.&lt;br /&gt;
&lt;br /&gt;
==Автоматизация резервного копирования информационных баз==&lt;br /&gt;
&lt;br /&gt;
Предполагается, что платформа &amp;quot;1С Предприятие&amp;quot; работает на GNU/Linux системе и скрипт резервного копирования выполняется от пользователя&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
, графическое окружение которого автоматически запускается после загрузки компьютера.&lt;br /&gt;
&lt;br /&gt;
Дело в том, что по каким-то причинам, разработчики платформы &amp;quot;1С Предприятие&amp;quot; не заложили в систему запуск резервного копирования в headless-режиме, поэтому платформе необходим дисплей X-сервера.&lt;br /&gt;
&lt;br /&gt;
Также предполагается, что файл с паролем от пользователя платформы &amp;quot;1С Предприятие&amp;quot;, которому разрешено выполнять резервное копирование, хранится в файле&lt;br /&gt;
&lt;br /&gt;
 /home/administrator/.1c-cluster-infobases-backup.pass&lt;br /&gt;
&lt;br /&gt;
и рекомендуемые права на этот файл&lt;br /&gt;
&lt;br /&gt;
 0400&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Подготовка каталога для скриптов===&lt;br /&gt;
&lt;br /&gt;
 mkdir /opt/1c_backup_scripts&lt;br /&gt;
&lt;br /&gt;
===Базовый скрипт===&lt;br /&gt;
&lt;br /&gt;
При необходимости, в тексте скрипта, отредактируйте строчку&lt;br /&gt;
&lt;br /&gt;
 bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
, указав путь до конкретной версии платформы &amp;quot;1С Предприятие&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже предоставлен текст, который можно выделить, скопировать в текстовый редактор, при необходимости поправить, затем весь этот текст можно бросить в консоль для создания файла посредством heredoc-синтаксиса:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup_infobase_1c_generic.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export LANG=ru_RU.UTF-8&lt;br /&gt;
&lt;br /&gt;
NON_ROOT_USER=&amp;quot;administrator&amp;quot;&lt;br /&gt;
DISPLAY=&amp;quot;:0&amp;quot;&lt;br /&gt;
STORAGE=&amp;quot;${1}&amp;quot;&lt;br /&gt;
SRV=&amp;quot;${2}&amp;quot;&lt;br /&gt;
REF=&amp;quot;${3}&amp;quot;&lt;br /&gt;
LOGIN=&amp;quot;${4}&amp;quot;&lt;br /&gt;
PASSWORD_FILE=&amp;quot;${5}&amp;quot;&lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;${6}&amp;quot;&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;${7}&amp;quot;&lt;br /&gt;
TIMEOUT_COUNTER=0&lt;br /&gt;
LOCK_FILE_PATH=&amp;quot;/home/usr1cv8/.1cv8/1C/1cv8/reg_1541/snccntx8e79a393-c2af-4fd7-b25a-af6b5ed19bfa/snccntx.dat&amp;quot;&lt;br /&gt;
#-----------------------------&lt;br /&gt;
export DISPLAY=&amp;quot;${DISPLAY}&amp;quot;&lt;br /&gt;
bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
PASSWORD=`cat ${PASSWORD_FILE} | head -1`&lt;br /&gt;
infobase_suffix=&amp;quot;$(date +%Y-%m-%d-%H-%M-%S).dt&amp;quot;&lt;br /&gt;
TMP_STORAGE=&amp;quot;/opt/1c_backup_scripts/tmp_storage&amp;quot;&lt;br /&gt;
ib_tmp_filepath=&amp;quot;${TMP_STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_tmp_log=&amp;quot;${ib_tmp_filepath}.log&amp;quot;&lt;br /&gt;
ib_filepath=&amp;quot;${STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_log=&amp;quot;${ib_filepath}.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function rotate_backups(){&lt;br /&gt;
filenames_cmd=&amp;quot;${STORAGE}/${REF}*&amp;quot;&lt;br /&gt;
current_unixtime=`date +%s --date=&amp;quot;$(date +%Y-%m-%d) 00:00:00&amp;quot;`&lt;br /&gt;
test_unixtime=$(($current_unixtime-$KEEP_BACKUPS_FOR_LAST_DAYS*60*60*24))&lt;br /&gt;
&lt;br /&gt;
for f in $(/bin/ls $filenames_cmd); do&lt;br /&gt;
#echo &amp;quot;f=$f&amp;quot;&lt;br /&gt;
datetime_from_file=`echo ${f} | awk -F '__' {'print $2'} | awk -F '.' {'print $1'}`&lt;br /&gt;
#echo &amp;quot;datetime_from_file=${datetime_from_file}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#2023-12-24-22-01-02&lt;br /&gt;
Y=`echo ${datetime_from_file} | awk -F '-' {'print $1'}`&lt;br /&gt;
M=`echo ${datetime_from_file} | awk -F '-' {'print $2'}`&lt;br /&gt;
D=`echo ${datetime_from_file} | awk -F '-' {'print $3'}`&lt;br /&gt;
h=`echo ${datetime_from_file} | awk -F '-' {'print $4'}`&lt;br /&gt;
m=`echo ${datetime_from_file} | awk -F '-' {'print $5'}`&lt;br /&gt;
s=`echo ${datetime_from_file} | awk -F '-' {'print $6'}`&lt;br /&gt;
&lt;br /&gt;
unixtime_from_file=`date +%s --date=&amp;quot;${Y}-${M}-${D} ${h}:${m}:${s}&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
if [[ $unixtime_from_file -lt $test_unixtime ]]; then&lt;br /&gt;
  echo &amp;quot;delete file: ${f}&amp;quot;&lt;br /&gt;
  /bin/rm ${f}&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;keep file: ${f}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function wait(){&lt;br /&gt;
&lt;br /&gt;
  if [[ $TIMEOUT_COUNTER -ge $BACKUP_TIMEOUT_SEC ]]; then&lt;br /&gt;
    kill -9 ${1}&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  if [ ! -d /proc/${1}/ ]; then&lt;br /&gt;
    nice_text=&amp;quot;Выгрузка информационной базы успешно завершена&amp;quot;&lt;br /&gt;
    res_text=$(grep -o -i &amp;quot;${nice_text}&amp;quot; ${ib_tmp_log})&lt;br /&gt;
&lt;br /&gt;
    # start apache2&lt;br /&gt;
    sudo systemctl start httpd2&lt;br /&gt;
&lt;br /&gt;
    if [ &amp;quot;${res_text}&amp;quot; = &amp;quot;${nice_text}&amp;quot; ]; then&lt;br /&gt;
      /bin/cp ${ib_tmp_filepath} ${ib_filepath} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_filepath}&lt;br /&gt;
      /bin/cp ${ib_tmp_log} ${ib_log} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_log}&lt;br /&gt;
      #echo &amp;quot;TEST: ${ib_filepath} AND ${ib_log}&amp;quot;&lt;br /&gt;
      rotate_backups&lt;br /&gt;
      exit 0&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    exit 1&lt;br /&gt;
  fi&lt;br /&gt;
  #echo &amp;quot;pid alive: ${1}&amp;quot;&lt;br /&gt;
  sleep 1&lt;br /&gt;
  TIMEOUT_COUNTER=$(($TIMEOUT_COUNTER+1))&lt;br /&gt;
  wait ${1}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# prepare tmp storage&lt;br /&gt;
[ ! -d ${TMP_STORAGE} ] &amp;amp;&amp;amp; sudo mkdir &amp;quot;${TMP_STORAGE}&amp;quot; &amp;amp;&amp;amp; sudo chown administrator: &amp;quot;${TMP_STORAGE}&amp;quot; -R&lt;br /&gt;
&lt;br /&gt;
# stop apache2&lt;br /&gt;
sudo systemctl stop httpd2&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
# reset srv1cv8 sessions&lt;br /&gt;
sudo systemctl stop srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
sudo /bin/rm -f &amp;quot;${LOCK_FILE_PATH}&amp;quot;&lt;br /&gt;
sudo systemctl start srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
DISPLAY=:0 XAUTHORITY=/home/administrator/.Xauthority ${bin1c} CONFIG /N &amp;quot;${LOGIN}&amp;quot; /P &amp;quot;${PASSWORD}&amp;quot; /S &amp;quot;${SRV}/${REF}&amp;quot; /DumpIB &amp;quot;${ib_tmp_filepath}&amp;quot; /OUT &amp;quot;${ib_tmp_log}&amp;quot; &amp;amp;&lt;br /&gt;
main_process_pid=$!&lt;br /&gt;
&lt;br /&gt;
wait ${main_process_pid}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup_infobase_1c_generic.sh&lt;br /&gt;
&lt;br /&gt;
===Скрипт для резервирования конкретной базы данных===&lt;br /&gt;
Данный скрипт представляет из себя обёртку над выше приведённым скриптом, с заданием конкретных параметров резервирования&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup__my_super_infobase.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
### PARAMETERS ###&lt;br /&gt;
STORAGE=&amp;quot;/mnt/storage/my-1c-host-backups&amp;quot; # каталог для сохранения резервных копий&lt;br /&gt;
SRV=&amp;quot;my-1c-host&amp;quot;                          # хост, на котором работает платформа &amp;quot;1С: Предприятие&amp;quot;&lt;br /&gt;
REF=&amp;quot;my_super_infobase&amp;quot;                   # имя базы данных, которую резервируем&lt;br /&gt;
LOGIN=&amp;quot;backupuser&amp;quot;                        # 1с-пользователь, которому разрешено резервировать базу данных&lt;br /&gt;
PASSWORD_FILE=&amp;quot;/home/administrator/.1c-cluster-infobases-backup.pass&amp;quot; # в этом файле должен находиться только пароль от 1с-пользоателя &lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;2&amp;quot;            # сохранить резервные копии только за эти несколько последных дней (в текущем примере - за 2 последних дня)&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;300&amp;quot;                  # таймаут, в течение которого разрешено работать процессу резервирования (процессу платформы &amp;quot;1С: Предприятие&amp;quot;. Если за этот таймаут процесс не успел сделать резервную копию, то он снимается с выполнения)&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### BOT PARAMETERS&lt;br /&gt;
TELEGRAM_BOT_TOKEN=&amp;quot;&amp;quot;             # сюда нужно вписать токен телеграм-бота, который будет отсылать уведомления&lt;br /&gt;
TELEGRAM_DESTINATION_GROUP_ID=&amp;quot;&amp;quot;  # сюда нужно вписать идентификатор телеграм-пользователя или телеграм-группы (не забывайте про минус в начале, если это идентификатор группы), в которого (или в которую, если это группа) бот будет писать сообщения&lt;br /&gt;
&lt;br /&gt;
function send_message_telegram(){&lt;br /&gt;
#exit 0  # раскомментируйте эту строчку, если отсылка сообщений телеграм-ботом не нужна (следовательно, и параметры дя бота при этом можно не задавать)&lt;br /&gt;
message=${1}&lt;br /&gt;
curl -s -X POST \&lt;br /&gt;
     -H 'Content-Type: application/json' \&lt;br /&gt;
     -d &amp;quot;{\&amp;quot;chat_id\&amp;quot;: \&amp;quot;${TELEGRAM_DESTINATION_GROUP_ID}\&amp;quot;, \&amp;quot;text\&amp;quot;: \&amp;quot;${message}\&amp;quot;, \&amp;quot;disable_notification\&amp;quot;: true}&amp;quot; \&lt;br /&gt;
     https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage &amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### START ###&lt;br /&gt;
BASE=`dirname ${0}`&lt;br /&gt;
${BASE}/backup_infobase_1c_generic.sh &amp;quot;${STORAGE}&amp;quot; &amp;quot;${SRV}&amp;quot; &amp;quot;${REF}&amp;quot; &amp;quot;${LOGIN}&amp;quot; &amp;quot;${PASSWORD_FILE}&amp;quot; &amp;quot;${KEEP_BACKUPS_FOR_LAST_DAYS}&amp;quot; &amp;quot;${BACKUP_TIMEOUT_SEC}&amp;quot;&lt;br /&gt;
res=$?&lt;br /&gt;
&lt;br /&gt;
if [ ${res} -eq 0 ]; then&lt;br /&gt;
send_message_telegram &amp;quot;[Успешно]\nРезервное копирование информационной базы '${REF}' выполнено успешно&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
send_message_telegram &amp;quot;[Ошибка]\nРезервное копирование информационной базы '${REF}' не выполнено&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&lt;br /&gt;
===Ставим задачу для планировщика cron===&lt;br /&gt;
&lt;br /&gt;
Под пользователем&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
в терминале открываем временный файл для настройки crontab&lt;br /&gt;
&lt;br /&gt;
 EDITOR=nano crontab -e&lt;br /&gt;
&lt;br /&gt;
в результате редактором&lt;br /&gt;
&lt;br /&gt;
 nano&lt;br /&gt;
&lt;br /&gt;
будет открыт временный файл для установки параметров планировщика для текущего пользователя. Отредактировав и сохранив (Ctrl+O - Enter) изменения в этом файле и закрыв редактор (Ctrl+X) будет сконфигурирован планировщик для текущего пользователя.&lt;br /&gt;
&lt;br /&gt;
Проверить корректность заданных параметров планировщика можно выполнением команды&lt;br /&gt;
&lt;br /&gt;
 crontab -l&lt;br /&gt;
&lt;br /&gt;
В случае, если планировщик был сконфигурирован на запуск скрипта резервного копирования каждые сутки с 23:01, вывод команды проверки должен быть примерно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#minute (0-59),&lt;br /&gt;
#|	hour (0-23),&lt;br /&gt;
#|	|	day of the month (1-31),&lt;br /&gt;
#|	|	|	month of the year (1-12),&lt;br /&gt;
#|	|	|	|	day of the week (0-6 with 0=Sunday).&lt;br /&gt;
#|	|	|	|	|	commands&lt;br /&gt;
1       23	*	*	*	/opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11359</id>
		<title>1c</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=1c&amp;diff=11359"/>
		<updated>2026-06-12T21:33:08Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: /* Исправляем параметр в конфигурации сервиса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=В GNU/Linux=&lt;br /&gt;
&lt;br /&gt;
==Установка учебной платформы 8.5.x на ОС Альт Стартеркит p11 GNOME==&lt;br /&gt;
&lt;br /&gt;
===Обновить ОС и ядро===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get update -y &amp;amp;&amp;amp; apt-get dist-upgrade -y &amp;amp;&amp;amp; update-kernel -y&lt;br /&gt;
&lt;br /&gt;
===Поставить пакеты===&lt;br /&gt;
&lt;br /&gt;
 su -&lt;br /&gt;
 apt-get install -f alt-tour firefox libwebkit2gtk 1c-preinstall-full libglui&lt;br /&gt;
&lt;br /&gt;
===Включить sudo su===&lt;br /&gt;
&lt;br /&gt;
Раскоментировать в файле:&lt;br /&gt;
&lt;br /&gt;
 /etc/sudoers&lt;br /&gt;
&lt;br /&gt;
строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
или строчку:&lt;br /&gt;
&lt;br /&gt;
 WHEEL_USERS ALL=(ALL:ALL) NOPASSWD: ALL&lt;br /&gt;
&lt;br /&gt;
(если необходимо выполнять sudo su без пароля)&lt;br /&gt;
&lt;br /&gt;
===Установить платформу===&lt;br /&gt;
&lt;br /&gt;
Предполагается, что есть файл установки платформы:&lt;br /&gt;
&lt;br /&gt;
 setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Тогда установка осуществляетс следующим образом:&lt;br /&gt;
&lt;br /&gt;
 chmod +x setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
 sudo ./setup-training-8.5.1.1150-x86_64.run&lt;br /&gt;
&lt;br /&gt;
Далее следуем инструкциям установщика. В установщике необходимо выбрать пункт &amp;quot;Установить ярлыки&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Установщик сам переключится в режим текстового интерфейса, если не найдёт дисплей (например, при установке по ssh). А вообще он имеет графический интерфейс...&lt;br /&gt;
&lt;br /&gt;
===Починить запуск платформы (актуально для ОС Альт веток p10 и p11 как минимум)===&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Получилось? Если да, то странно... Должна быть такая ошибка:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libwebkit2gtk-4.0.so.37)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib64/libicuuc.so.74)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib64/libjxl.so.0.11)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_12.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t: /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1: version `GCC_13.0.0' not found (required by /lib64/libhwy.so.1)&lt;br /&gt;
&lt;br /&gt;
Не такая ошибка? Если да, то вы точно все пункты до этого выполнили (точно пакеты все установлены, которые выше в команде установки пакетовв перечислены)?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если ошибка такая, то чиним:&lt;br /&gt;
&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libstdc++.so.6&lt;br /&gt;
 sudo rm -f /opt/1cv8t/x86_64/8.5.1.1150/libgcc_s.so.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пробуем запустить ещё раз:&lt;br /&gt;
&lt;br /&gt;
 /opt/1cv8t/x86_64/8.5.1.1150/1cv8t&lt;br /&gt;
&lt;br /&gt;
Всё должно работать. Теперь можно запускать платформу посредством ярлыков (кнопок меню приложений)&lt;br /&gt;
&lt;br /&gt;
По прежнему не запускается? Если да, то спешим на встречу новым приключениям!&lt;br /&gt;
&lt;br /&gt;
===Переопределить настройки по умолчанию для ОС Альт===&lt;br /&gt;
&lt;br /&gt;
Перезагрузиться&lt;br /&gt;
&lt;br /&gt;
====Каталог для файловых баз данных платформы 1С и sgid-bit====&lt;br /&gt;
&lt;br /&gt;
Поскольку полный путь до каталога с файловой базой данных будет фигурировать в конфигурационных файлах веб-сервера, его рекомендуется сделать отличным от пути по умолчанию, который предлагает платформа 1С.&lt;br /&gt;
&lt;br /&gt;
Например, так:&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/bases&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При публикации базы данных через веб-сервер необходимо чтобы у процесса веб-сервера, запущенного от пользователя&lt;br /&gt;
&lt;br /&gt;
 apache2&lt;br /&gt;
&lt;br /&gt;
был доступ на чтение и запись в каталог с базой данных конфигурации 1С.&lt;br /&gt;
&lt;br /&gt;
Один из вариантов это сделать следующий:&lt;br /&gt;
&lt;br /&gt;
1. Разрешаем членам группы-владельца каталога чтение и запись&lt;br /&gt;
&lt;br /&gt;
 chmod g+rwx ~/bases -R&lt;br /&gt;
&lt;br /&gt;
2. Устанавливаем sgid бит на каталог&lt;br /&gt;
&lt;br /&gt;
 chmod g+s ~/bases -R&lt;br /&gt;
&lt;br /&gt;
3. Добавляем пользователя apache2 в группу-владельца каталога&lt;br /&gt;
&lt;br /&gt;
 sudo usermod -aG user apache2&lt;br /&gt;
&lt;br /&gt;
==Публикация REST/Odata на веб-сервере==&lt;br /&gt;
&lt;br /&gt;
Предполагается что до этого были выполнены все действия в предыдущем разделе...&lt;br /&gt;
&lt;br /&gt;
===Устанавливаем и включаем веб-сервер apache2===&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install -y apache2&lt;br /&gt;
 sudo systemctl enable --now httpd2&lt;br /&gt;
&lt;br /&gt;
===Создаём симлинк для httpd2===&lt;br /&gt;
&lt;br /&gt;
Для скриптов платформы 1С это важно...&lt;br /&gt;
&lt;br /&gt;
 ln -s /sbin/httpd2 /sbin/httpd&lt;br /&gt;
&lt;br /&gt;
===Публикуем командой===&lt;br /&gt;
&lt;br /&gt;
Сначала создаём файл (оно само не может):&lt;br /&gt;
&lt;br /&gt;
 sudo touch /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
Потом публикуем:&lt;br /&gt;
&lt;br /&gt;
 sudo HOME=/home/user /opt/1cv8t/x86_64/8.5.1.1150/webinstt -apache24 -wsdir odata_base -dir /var/www/odata_base -connstr &amp;quot;File=/home/user/bases/base1;&amp;quot; -confPath /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
В ответ должно прийти что-то типа этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация выполнена&lt;br /&gt;
&lt;br /&gt;
или этого:&lt;br /&gt;
&lt;br /&gt;
 Публикация обновлена&lt;br /&gt;
&lt;br /&gt;
Примерное содержимое файла в контексте конфигурационных файлов веб-сервера apache2:&lt;br /&gt;
&lt;br /&gt;
 cat /etc/httpd2/conf/sites-enabled/1c_odata.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LoadModule _1cws_module &amp;quot;/opt/1cv8t/x86_64/8.5.1.1150/wsap24t.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 1c publication&lt;br /&gt;
Alias &amp;quot;/odata_base&amp;quot; &amp;quot;/var/www/odata_base/&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/odata_base/&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride All&lt;br /&gt;
    Options None&lt;br /&gt;
    Require all granted&lt;br /&gt;
    SetHandler 1c-application&lt;br /&gt;
    ManagedApplicationDescriptor &amp;quot;/var/www/odata_base/default.vrd&amp;quot;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Исправляем параметр в конфигурации сервиса===&lt;br /&gt;
&lt;br /&gt;
Исправляем значение параметра:&lt;br /&gt;
&lt;br /&gt;
 sed -i 's/ProtectHome=yes/ProtectHome=no/g' /lib/systemd/system/httpd2.service&lt;br /&gt;
&lt;br /&gt;
После этого перезагрузим демона systemd&lt;br /&gt;
&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R apache2: /var/www/odata_base&lt;br /&gt;
chmod -R 755 /var/www/odata_base&lt;br /&gt;
&lt;br /&gt;
chmod a+x /home/user/&lt;br /&gt;
chmod a+x /home/user/bases/&lt;br /&gt;
&lt;br /&gt;
chown -R apache2:apache2 /home/user/bases/base1/&lt;br /&gt;
chmod -R 775 /home/user/bases/base1/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Перезапускаем веб-сервер===&lt;br /&gt;
&lt;br /&gt;
 systemctl restart httpd2&lt;br /&gt;
&lt;br /&gt;
===Проверяем публикацию===&lt;br /&gt;
&lt;br /&gt;
Идём браузером по адресу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;/e1csys/vrscore/exception.xslt?sysver=8.5.1.1150&amp;quot;?&amp;gt;&amp;lt;exception xmlns=&amp;quot;http://v8.1c.ru/8.2/virtual-resource-system&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xsi:type=&amp;quot;Exception&amp;quot; clsid=&amp;quot;580392e6-ba49-4280-ac67-fcd6f2180121&amp;quot; reason=&amp;quot;500&amp;quot;&amp;gt;&amp;lt;descr xmlns=&amp;quot;http://v8.1c.ru/8.1/data/core&amp;quot;&amp;gt;Error loading file-based infobase support components&amp;lt;/descr&amp;gt;&amp;lt;inner xmlns=&amp;quot;http://v8.1c.ru/8.1/data/core&amp;quot; xsi:type=&amp;quot;Exception&amp;quot; clsid=&amp;quot;d294e384-7ea6-49c6-be96-f3a6e3de1242&amp;quot;&amp;gt;&amp;lt;descr&amp;gt;Error when loading component 'help'&amp;lt;/descr&amp;gt;&amp;lt;inner xsi:type=&amp;quot;Exception&amp;quot; clsid=&amp;quot;9db1fa37-b455-4f3f-b8dd-7de0ea7d6da3&amp;quot;&amp;gt;&amp;lt;descr&amp;gt;File access error '/home/user'. 13(0x0000000D): Permission denied&amp;lt;/descr&amp;gt;&amp;lt;data&amp;gt;77u/ew0KezlkYjFmYTM3LWI0NTUtNGYzZi1iOGRkLTdkZTBlYTdkNmRhMywiRmls&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Автоматизация резервного копирования информационных баз==&lt;br /&gt;
&lt;br /&gt;
Предполагается, что платформа &amp;quot;1С Предприятие&amp;quot; работает на GNU/Linux системе и скрипт резервного копирования выполняется от пользователя&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
, графическое окружение которого автоматически запускается после загрузки компьютера.&lt;br /&gt;
&lt;br /&gt;
Дело в том, что по каким-то причинам, разработчики платформы &amp;quot;1С Предприятие&amp;quot; не заложили в систему запуск резервного копирования в headless-режиме, поэтому платформе необходим дисплей X-сервера.&lt;br /&gt;
&lt;br /&gt;
Также предполагается, что файл с паролем от пользователя платформы &amp;quot;1С Предприятие&amp;quot;, которому разрешено выполнять резервное копирование, хранится в файле&lt;br /&gt;
&lt;br /&gt;
 /home/administrator/.1c-cluster-infobases-backup.pass&lt;br /&gt;
&lt;br /&gt;
и рекомендуемые права на этот файл&lt;br /&gt;
&lt;br /&gt;
 0400&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Подготовка каталога для скриптов===&lt;br /&gt;
&lt;br /&gt;
 mkdir /opt/1c_backup_scripts&lt;br /&gt;
&lt;br /&gt;
===Базовый скрипт===&lt;br /&gt;
&lt;br /&gt;
При необходимости, в тексте скрипта, отредактируйте строчку&lt;br /&gt;
&lt;br /&gt;
 bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
, указав путь до конкретной версии платформы &amp;quot;1С Предприятие&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ниже предоставлен текст, который можно выделить, скопировать в текстовый редактор, при необходимости поправить, затем весь этот текст можно бросить в консоль для создания файла посредством heredoc-синтаксиса:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup_infobase_1c_generic.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export LANG=ru_RU.UTF-8&lt;br /&gt;
&lt;br /&gt;
NON_ROOT_USER=&amp;quot;administrator&amp;quot;&lt;br /&gt;
DISPLAY=&amp;quot;:0&amp;quot;&lt;br /&gt;
STORAGE=&amp;quot;${1}&amp;quot;&lt;br /&gt;
SRV=&amp;quot;${2}&amp;quot;&lt;br /&gt;
REF=&amp;quot;${3}&amp;quot;&lt;br /&gt;
LOGIN=&amp;quot;${4}&amp;quot;&lt;br /&gt;
PASSWORD_FILE=&amp;quot;${5}&amp;quot;&lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;${6}&amp;quot;&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;${7}&amp;quot;&lt;br /&gt;
TIMEOUT_COUNTER=0&lt;br /&gt;
LOCK_FILE_PATH=&amp;quot;/home/usr1cv8/.1cv8/1C/1cv8/reg_1541/snccntx8e79a393-c2af-4fd7-b25a-af6b5ed19bfa/snccntx.dat&amp;quot;&lt;br /&gt;
#-----------------------------&lt;br /&gt;
export DISPLAY=&amp;quot;${DISPLAY}&amp;quot;&lt;br /&gt;
bin1c=&amp;quot;/opt/1cv8/x86_64/8.3.23.1912/1cv8&amp;quot;&lt;br /&gt;
PASSWORD=`cat ${PASSWORD_FILE} | head -1`&lt;br /&gt;
infobase_suffix=&amp;quot;$(date +%Y-%m-%d-%H-%M-%S).dt&amp;quot;&lt;br /&gt;
TMP_STORAGE=&amp;quot;/opt/1c_backup_scripts/tmp_storage&amp;quot;&lt;br /&gt;
ib_tmp_filepath=&amp;quot;${TMP_STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_tmp_log=&amp;quot;${ib_tmp_filepath}.log&amp;quot;&lt;br /&gt;
ib_filepath=&amp;quot;${STORAGE}/${REF}__${infobase_suffix}&amp;quot;&lt;br /&gt;
ib_log=&amp;quot;${ib_filepath}.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function rotate_backups(){&lt;br /&gt;
filenames_cmd=&amp;quot;${STORAGE}/${REF}*&amp;quot;&lt;br /&gt;
current_unixtime=`date +%s --date=&amp;quot;$(date +%Y-%m-%d) 00:00:00&amp;quot;`&lt;br /&gt;
test_unixtime=$(($current_unixtime-$KEEP_BACKUPS_FOR_LAST_DAYS*60*60*24))&lt;br /&gt;
&lt;br /&gt;
for f in $(/bin/ls $filenames_cmd); do&lt;br /&gt;
#echo &amp;quot;f=$f&amp;quot;&lt;br /&gt;
datetime_from_file=`echo ${f} | awk -F '__' {'print $2'} | awk -F '.' {'print $1'}`&lt;br /&gt;
#echo &amp;quot;datetime_from_file=${datetime_from_file}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#2023-12-24-22-01-02&lt;br /&gt;
Y=`echo ${datetime_from_file} | awk -F '-' {'print $1'}`&lt;br /&gt;
M=`echo ${datetime_from_file} | awk -F '-' {'print $2'}`&lt;br /&gt;
D=`echo ${datetime_from_file} | awk -F '-' {'print $3'}`&lt;br /&gt;
h=`echo ${datetime_from_file} | awk -F '-' {'print $4'}`&lt;br /&gt;
m=`echo ${datetime_from_file} | awk -F '-' {'print $5'}`&lt;br /&gt;
s=`echo ${datetime_from_file} | awk -F '-' {'print $6'}`&lt;br /&gt;
&lt;br /&gt;
unixtime_from_file=`date +%s --date=&amp;quot;${Y}-${M}-${D} ${h}:${m}:${s}&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
if [[ $unixtime_from_file -lt $test_unixtime ]]; then&lt;br /&gt;
  echo &amp;quot;delete file: ${f}&amp;quot;&lt;br /&gt;
  /bin/rm ${f}&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;keep file: ${f}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function wait(){&lt;br /&gt;
&lt;br /&gt;
  if [[ $TIMEOUT_COUNTER -ge $BACKUP_TIMEOUT_SEC ]]; then&lt;br /&gt;
    kill -9 ${1}&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  if [ ! -d /proc/${1}/ ]; then&lt;br /&gt;
    nice_text=&amp;quot;Выгрузка информационной базы успешно завершена&amp;quot;&lt;br /&gt;
    res_text=$(grep -o -i &amp;quot;${nice_text}&amp;quot; ${ib_tmp_log})&lt;br /&gt;
&lt;br /&gt;
    # start apache2&lt;br /&gt;
    sudo systemctl start httpd2&lt;br /&gt;
&lt;br /&gt;
    if [ &amp;quot;${res_text}&amp;quot; = &amp;quot;${nice_text}&amp;quot; ]; then&lt;br /&gt;
      /bin/cp ${ib_tmp_filepath} ${ib_filepath} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_filepath}&lt;br /&gt;
      /bin/cp ${ib_tmp_log} ${ib_log} &amp;amp;&amp;amp; /bin/rm ${ib_tmp_log}&lt;br /&gt;
      #echo &amp;quot;TEST: ${ib_filepath} AND ${ib_log}&amp;quot;&lt;br /&gt;
      rotate_backups&lt;br /&gt;
      exit 0&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    exit 1&lt;br /&gt;
  fi&lt;br /&gt;
  #echo &amp;quot;pid alive: ${1}&amp;quot;&lt;br /&gt;
  sleep 1&lt;br /&gt;
  TIMEOUT_COUNTER=$(($TIMEOUT_COUNTER+1))&lt;br /&gt;
  wait ${1}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# prepare tmp storage&lt;br /&gt;
[ ! -d ${TMP_STORAGE} ] &amp;amp;&amp;amp; sudo mkdir &amp;quot;${TMP_STORAGE}&amp;quot; &amp;amp;&amp;amp; sudo chown administrator: &amp;quot;${TMP_STORAGE}&amp;quot; -R&lt;br /&gt;
&lt;br /&gt;
# stop apache2&lt;br /&gt;
sudo systemctl stop httpd2&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
# reset srv1cv8 sessions&lt;br /&gt;
sudo systemctl stop srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
sudo /bin/rm -f &amp;quot;${LOCK_FILE_PATH}&amp;quot;&lt;br /&gt;
sudo systemctl start srv1cv8&lt;br /&gt;
sleep 2&lt;br /&gt;
&lt;br /&gt;
DISPLAY=:0 XAUTHORITY=/home/administrator/.Xauthority ${bin1c} CONFIG /N &amp;quot;${LOGIN}&amp;quot; /P &amp;quot;${PASSWORD}&amp;quot; /S &amp;quot;${SRV}/${REF}&amp;quot; /DumpIB &amp;quot;${ib_tmp_filepath}&amp;quot; /OUT &amp;quot;${ib_tmp_log}&amp;quot; &amp;amp;&lt;br /&gt;
main_process_pid=$!&lt;br /&gt;
&lt;br /&gt;
wait ${main_process_pid}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup_infobase_1c_generic.sh&lt;br /&gt;
&lt;br /&gt;
===Скрипт для резервирования конкретной базы данных===&lt;br /&gt;
Данный скрипт представляет из себя обёртку над выше приведённым скриптом, с заданием конкретных параметров резервирования&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /opt/1c_backup_scripts/backup__my_super_infobase.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
### PARAMETERS ###&lt;br /&gt;
STORAGE=&amp;quot;/mnt/storage/my-1c-host-backups&amp;quot; # каталог для сохранения резервных копий&lt;br /&gt;
SRV=&amp;quot;my-1c-host&amp;quot;                          # хост, на котором работает платформа &amp;quot;1С: Предприятие&amp;quot;&lt;br /&gt;
REF=&amp;quot;my_super_infobase&amp;quot;                   # имя базы данных, которую резервируем&lt;br /&gt;
LOGIN=&amp;quot;backupuser&amp;quot;                        # 1с-пользователь, которому разрешено резервировать базу данных&lt;br /&gt;
PASSWORD_FILE=&amp;quot;/home/administrator/.1c-cluster-infobases-backup.pass&amp;quot; # в этом файле должен находиться только пароль от 1с-пользоателя &lt;br /&gt;
KEEP_BACKUPS_FOR_LAST_DAYS=&amp;quot;2&amp;quot;            # сохранить резервные копии только за эти несколько последных дней (в текущем примере - за 2 последних дня)&lt;br /&gt;
BACKUP_TIMEOUT_SEC=&amp;quot;300&amp;quot;                  # таймаут, в течение которого разрешено работать процессу резервирования (процессу платформы &amp;quot;1С: Предприятие&amp;quot;. Если за этот таймаут процесс не успел сделать резервную копию, то он снимается с выполнения)&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### BOT PARAMETERS&lt;br /&gt;
TELEGRAM_BOT_TOKEN=&amp;quot;&amp;quot;             # сюда нужно вписать токен телеграм-бота, который будет отсылать уведомления&lt;br /&gt;
TELEGRAM_DESTINATION_GROUP_ID=&amp;quot;&amp;quot;  # сюда нужно вписать идентификатор телеграм-пользователя или телеграм-группы (не забывайте про минус в начале, если это идентификатор группы), в которого (или в которую, если это группа) бот будет писать сообщения&lt;br /&gt;
&lt;br /&gt;
function send_message_telegram(){&lt;br /&gt;
#exit 0  # раскомментируйте эту строчку, если отсылка сообщений телеграм-ботом не нужна (следовательно, и параметры дя бота при этом можно не задавать)&lt;br /&gt;
message=${1}&lt;br /&gt;
curl -s -X POST \&lt;br /&gt;
     -H 'Content-Type: application/json' \&lt;br /&gt;
     -d &amp;quot;{\&amp;quot;chat_id\&amp;quot;: \&amp;quot;${TELEGRAM_DESTINATION_GROUP_ID}\&amp;quot;, \&amp;quot;text\&amp;quot;: \&amp;quot;${message}\&amp;quot;, \&amp;quot;disable_notification\&amp;quot;: true}&amp;quot; \&lt;br /&gt;
     https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage &amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
# ------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
### START ###&lt;br /&gt;
BASE=`dirname ${0}`&lt;br /&gt;
${BASE}/backup_infobase_1c_generic.sh &amp;quot;${STORAGE}&amp;quot; &amp;quot;${SRV}&amp;quot; &amp;quot;${REF}&amp;quot; &amp;quot;${LOGIN}&amp;quot; &amp;quot;${PASSWORD_FILE}&amp;quot; &amp;quot;${KEEP_BACKUPS_FOR_LAST_DAYS}&amp;quot; &amp;quot;${BACKUP_TIMEOUT_SEC}&amp;quot;&lt;br /&gt;
res=$?&lt;br /&gt;
&lt;br /&gt;
if [ ${res} -eq 0 ]; then&lt;br /&gt;
send_message_telegram &amp;quot;[Успешно]\nРезервное копирование информационной базы '${REF}' выполнено успешно&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
send_message_telegram &amp;quot;[Ошибка]\nРезервное копирование информационной базы '${REF}' не выполнено&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым&lt;br /&gt;
&lt;br /&gt;
 chmod +x /opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&lt;br /&gt;
===Ставим задачу для планировщика cron===&lt;br /&gt;
&lt;br /&gt;
Под пользователем&lt;br /&gt;
&lt;br /&gt;
 administrator&lt;br /&gt;
&lt;br /&gt;
в терминале открываем временный файл для настройки crontab&lt;br /&gt;
&lt;br /&gt;
 EDITOR=nano crontab -e&lt;br /&gt;
&lt;br /&gt;
в результате редактором&lt;br /&gt;
&lt;br /&gt;
 nano&lt;br /&gt;
&lt;br /&gt;
будет открыт временный файл для установки параметров планировщика для текущего пользователя. Отредактировав и сохранив (Ctrl+O - Enter) изменения в этом файле и закрыв редактор (Ctrl+X) будет сконфигурирован планировщик для текущего пользователя.&lt;br /&gt;
&lt;br /&gt;
Проверить корректность заданных параметров планировщика можно выполнением команды&lt;br /&gt;
&lt;br /&gt;
 crontab -l&lt;br /&gt;
&lt;br /&gt;
В случае, если планировщик был сконфигурирован на запуск скрипта резервного копирования каждые сутки с 23:01, вывод команды проверки должен быть примерно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#minute (0-59),&lt;br /&gt;
#|	hour (0-23),&lt;br /&gt;
#|	|	day of the month (1-31),&lt;br /&gt;
#|	|	|	month of the year (1-12),&lt;br /&gt;
#|	|	|	|	day of the week (0-6 with 0=Sunday).&lt;br /&gt;
#|	|	|	|	|	commands&lt;br /&gt;
1       23	*	*	*	/opt/1c_backup_scripts/backup__my_super_infobase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F_Swagger_%D0%B2_NestJS&amp;diff=11314</id>
		<title>Интеграция Swagger в NestJS</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F_Swagger_%D0%B2_NestJS&amp;diff=11314"/>
		<updated>2026-03-01T13:00:52Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: Shogun Sun переименовал страницу Настройка Swagger в NestJS в Интеграция Swagger в NestJS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;установка-необходимых-зависимостей&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Установка необходимых зависимостей ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;npm install @nestjs/swagger&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;настройка-файла-main.ts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Настройка файла main.ts ==&lt;br /&gt;
&lt;br /&gt;
# Импорт модулей В начало файла добавляем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Конфигурация спецификации Объект config определяет метаданные вашей документации. Его необходимо создать внутри функции bootstrap():&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;const config = new DocumentBuilder()&lt;br /&gt;
    .setTitle('Заголовок документации')&lt;br /&gt;
    .setDescription('Описание документации')&lt;br /&gt;
    .setVersion('Версия документации')&lt;br /&gt;
    .build() &amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Инициализация модуля Создание функции-фабрики, которая собирает спецификацию API на основе декораторов в контроллерах.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;const documentFactory = () =&amp;gt; SwaggerModule.createDocument(app, config);&lt;br /&gt;
SwaggerModule.setup('docs', app, documentFactory);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Метод setup подключает интерактивную документацию по пути /docs, связывая ее с приложением NestJS и созданным документом.&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_Swagger_%D0%B2_NestJS&amp;diff=11315</id>
		<title>Настройка Swagger в NestJS</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_Swagger_%D0%B2_NestJS&amp;diff=11315"/>
		<updated>2026-03-01T13:00:52Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: Shogun Sun переименовал страницу Настройка Swagger в NestJS в Интеграция Swagger в NestJS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[Интеграция Swagger в NestJS]]&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F_Swagger_%D0%B2_NestJS&amp;diff=11313</id>
		<title>Интеграция Swagger в NestJS</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F_Swagger_%D0%B2_NestJS&amp;diff=11313"/>
		<updated>2026-03-01T12:56:15Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;установка-необходимых-зависимостей&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Установка необходимых зависимостей ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;npm install @nestjs/swagger&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;настройка-файла-main.ts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Настройка файла main.ts ==&lt;br /&gt;
&lt;br /&gt;
# Импорт модулей В начало файла добавляем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Конфигурация спецификации Объект config определяет метаданные вашей документации. Его необходимо создать внутри функции bootstrap():&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;const config = new DocumentBuilder()&lt;br /&gt;
    .setTitle('Заголовок документации')&lt;br /&gt;
    .setDescription('Описание документации')&lt;br /&gt;
    .setVersion('Версия документации')&lt;br /&gt;
    .build() &amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Инициализация модуля Создание функции-фабрики, которая собирает спецификацию API на основе декораторов в контроллерах.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;const documentFactory = () =&amp;gt; SwaggerModule.createDocument(app, config);&lt;br /&gt;
SwaggerModule.setup('docs', app, documentFactory);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Метод setup подключает интерактивную документацию по пути /docs, связывая ее с приложением NestJS и созданным документом.&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F_Swagger_%D0%B2_NestJS&amp;diff=11312</id>
		<title>Интеграция Swagger в NestJS</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F_Swagger_%D0%B2_NestJS&amp;diff=11312"/>
		<updated>2026-03-01T11:35:53Z</updated>

		<summary type="html">&lt;p&gt;Shogun Sun: Добавлена инструкция настройки файла main.ts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;интеграция-swagger-в-nestjs&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Интеграция Swagger в NestJS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;установка-необходимых-зависимостей&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Установка необходимых зависимостей ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;npm install @nestjs/swagger&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;настройка-файла-main.ts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Настройка файла main.ts ==&lt;br /&gt;
&lt;br /&gt;
# Импорт модулей В начало файла добавляем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Конфигурация спецификации Объект config определяет метаданные вашей документации. Его необходимо создать внутри функции bootstrap():&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;const config = new DocumentBuilder()&lt;br /&gt;
    .setTitle('Заголовок документации')&lt;br /&gt;
    .setDescription('Описание документации')&lt;br /&gt;
    .setVersion('Версия документации')&lt;br /&gt;
    .build() &amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Инициализация модуля Создание функции-фабрики, которая собирает спецификацию API на основе декораторов в контроллерах.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;const documentFactory = () =&amp;gt; SwaggerModule.createDocument(app, config);&lt;br /&gt;
SwaggerModule.setup('docs', app, documentFactory);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Метод setup подключает интерактивную документацию по пути /docs, связывая ее с приложением NestJS и созданным документом.&lt;/div&gt;</summary>
		<author><name>Shogun Sun</name></author>
		
	</entry>
</feed>