Нужно, чтобы у звонящих в службу поддержки
была возможность разговаривать между собой,
пока они дожидаются ответа.
©www.anekdot.ru
Напомню, что в прошлых публикациях цикла был собран полноценный контур сети среднего класса AD с серверами 1С Предприятие и PostgreSQL, размещенными на отечественной РЕДОС.
С отказоустойчивостью, балансировкой нагрузки, авторизацией ОС, системой взаимодействия, архивированием etc. Посмотрите, кто еще не.
При работе всплывают/вспоминаются полезные вещи, очевидные для тех, кто занимается настройкой серверов 1С постоянно, их собираю в отдельную публикацию и далее всю мелочевку буду скидывать сюда.
Настоящие линуксовые админы или DBA не поймут, что здесь можно не запомнить.
Но, настоящий админ никогда не будет смеяться над высказываниями 1С-ника, он только сделает такое выражение бровью, как-будто поправляет монокль.
Кто не любит много букв
Пользуясь случаем, поздравляю всех с наступающим Новым 2025 Годом и Рождеством!
Желаю интересной работы, крутых проектов и, конечно же, мира, крепкого здоровья и удачи!
Остальные, приступим.
-
Комбинации клавиш Ctrl + C, Ctrl + D и Ctrl + Z
Нажатие Ctrl + C заставляет терминал послать сигнал SIGINT процессу, который на данный момент его контролирует. Когда foreground-программа получает сигнал SIGINT, она обязана прервать свою работу.
Нажатие Ctrl + D говорит терминалу, что надо зарегистрировать так называемый EOF (end of file – конец файла), то есть поток ввода окончен. Bash интерпретирует это как желание выйти из программы.
Комбинация клавиш Ctrl + Z посылает процессу сигнал, который приказывает ему остановиться. Это значит, что процесс остается в системе, но как бы замораживается. Само собой разумеется он уходит в бэкграунд (background) – в фоновый режим. С помощью командыbg
его можно снова запустить, оставив при этом в фоновом режиме. Командаfg
не только возобновляет ранее приостановленный процесс, но и выводит его из фона на передний план.
Источник
-
Скрипты для определения как размеров таблиц, так и размеров колонок MS SQL
Пригодятся при переводе баз 1С, при помощи утилиты автономного сервера, с MSSQL на PostgreSQL.
Как минимум, для того чтобы определить объем данных, но как максимум, если ваши пользователи умудрятся запихнуть в одну ячейку данных более 1 ГБ (мои смогли), то перенос будет рушиться с совершенно неочевидной ошибкой.
Ошибка СУБД server closed connection unexpectedly
Это же в технологическом журнале.
Эту ячейку(ки) надо будет найти при помощи скриптов, очистить и перенести другим способом.
Сама строка запуска переноса
<каталог 1С>\ibcmd infobase replicate --data=\tmp\ibcmd_data --dbms=MSSQLServer --database-server=<имя сервера MSSQL> --database-name=<имя БД источника> --database-user=<пользователь с правами на БД> --database-password=<его пароль> --target-dbms=PostgreSQL --target-database-server="<сервер PostgreSQL> port=<его порт>" --target-database-name=<имя БД назначения> --target-database-user=<пользователь с правами на БД> --target-database-password=<его пароль> --force --target-create-database
Кажется, что дело может быть в размерах базы 1С, но это не так, дело именно в размере ячейки.
Скрипты которые помогут это понять— size of tables 01
;with cte as (
SELECT
t.name as TableName,
SUM (s.used_page_count) as used_pages_count,
SUM (CASE
WHEN (i.index_id < 2) THEN (in_row_data_page_count + lob_used_page_count + row_overflow_used_page_count)
ELSE lob_used_page_count + row_overflow_used_page_count
END) as pages
FROM sys.dm_db_partition_stats AS s
JOIN sys.tables AS t ON s.object_id = t.object_id
JOIN sys.indexes AS i ON i.[object_id] = t.[object_id] AND s.index_id = i.index_id
GROUP BY t.name
)
select
cte.TableName,
cast((cte.pages * 8.)/1024 as decimal(10,3)) as TableSizeInMB,
cast(((CASE WHEN cte.used_pages_count > cte.pages
THEN cte.used_pages_count — cte.pages
ELSE 0
END) * 8./1024) as decimal(10,3)) as IndexSizeInMB
from cte
order by 2 desc
— size of tables 02
SELECT
t.name AS TableName,
s.name AS SchemaName,
p.rows,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB,
(SUM(a.total_pages) — SUM(a.used_pages)) * 8 AS UnusedSpaceKB,
CAST(ROUND(((SUM(a.total_pages) — SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.object_id = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
WHERE
t.name NOT LIKE 'dt%'
AND t.is_ms_shipped = 0
AND i.object_id > 255
GROUP BY
t.name, s.name, p.rows
ORDER BY
TotalSpaceMB DESC, t.name
--Size of rows table
declare table varchar(20)
declare @idcol varchar(20)
declare sql varchar(1000)
set table = 'dbo.<имя таблицы>'
set @idcol = '<имя колонки>'
set sql = 'select ' + @idcol +', (0'
select sql = sql + ' + isnull(datalength(' + name + '), 1)'
from syscolumns where id = object_id(table)
set sql = sql + ') as rowsize from ' + table + ' order by rowsize desc'
exec (sql)
Источник Stack Overflow.
Вдогонку небольшой скрипт PostgreSQL,
Когда перенос не пройдет, желательно удалить БД, а чтобы ее удалить надо закрыть активные соединения с ней.
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '<имя БД>' AND procpid <> pg_backend_pid();
-
Генераторы командной строки для утилит linux
Очень помогут при формировании аргументов команд find, например.
ittricks.ru/utilities/find-command-generator
cmdgenerator.phphe.com
-
Более продвинутый PG Configurator
От компании CYBERTEC PostgreSQL International GmbH
-
Отличная утилита для мониторинга сервера
На замену различным atop/htop/top
Glances
-
Шпаргалка по journalctl в Linux
И кладезь знаний по linux от сайта losst.pro
-
Включение отладки Kerberos
Она может пригодится при разборе авторизации ОС.
Все видели эти строки файла /etc/krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
Но не все знают, что они относятся только к серверу, а не к клиенту.
На нем надо
Для одиночной команды KRB5_TRACE=/dev/stdout kinit -V
Для сеанса конкретного пользователя необходимо изменить файл .bash_profile в домашней директории пользователя, добавив
export KRB5_TRACE=/tmp/<имя файла>.log
Вариант для всех пользователей
/etc/profile.d/krb5_set.sh
export KRB5_TRACE=/tmp/<имя файла>.log
Для службы
в файле скрипте для запуска сервиса
Environment=KRB5_TRACE=/tmp/<имя файла>.log
/tmp/<имя файла>.log если что можно заменить полностью на свое имя
-
Если в сети прокси с доменной авторизацией, а сервер не в домене
Пригодится утилита cntlm
NTLM / NTLM Session Response / NTLMv2 authenticating HTTP proxy
инструкция на сайте
Прописать прокси аналогично сказанному выше
Необходимо изменить файл .bash_profile в домашней директории пользователя 1С
Вариант для всех /etc/profile.d/proxy_set.sh
export {http,ftp,https,rsync}_proxy="http://proxyserver:port"
export {HTTP,FTP,HTTPS,RSYNC}_PROXY=$http_proxy
-
Как пересобрать кластер Patroni
Справедливый вопрос: Зачем это может понадобиться?
Думаю 99% прекрасно живут с кластером PostgreSQL созданным при установке.
Одно как принято говорить, есть нюанс.
Цитирую документацию: Из соображений безопасности новый кластер, созданный программой initdb, будет доступен только для владельца кластера.
Источник
Это роль и пользователь postgres в общем случае, иными словами суперпользователь.
Как бы это ни было странно в свете сказанного выше, но резервное копирование под суперпользователем, это дыра в безопасности.
Выход: Ключ--allow-group-access
позволяет разрешить чтение файлов в кластере всем пользователям, входящим в группу владельца кластера. Это полезно для выполнения резервного копирования от имени непривилегированного пользователя.
Источник
Эта опция потребует пересоздания кластера initdb.
Базы вы, предположим, вернете из архива, но кластер выпадет из Patroni.
Точнее из базы etcd, которую читает Patroni. Ошибку вы увидите в статусе
systemctl status patroni.service --no-pager -l
В ней же будет новый номер кластера.
Далее финт ушами
Читаем БД etcd
etcdctl --endpoints=localhost:2379 get /<ваш namespace>/<ваш кластер>/initialize --user="root" --password="хххххх"
Пишем новое значение в БД etcd
etcdctl --endpoints=localhost:2379 put /<ваш namespace>/<ваш кластер>/initialize <номер кластера>--user="root" --password="хххххх"
Перезапускаем patroni
systemctl start patroni.service
Проверяем что он работает штатно
systemctl status patroni.service --no-pager -l
/usr/local/bin/patronictl --config-file /etc/patroni/patroni.yml topology <ваш кластер>
-
Где менять PGDATA при установке из дистрибутива от PostgresPro
Лежит в файле соответствующем установленному релизу, в каталоге /etc/default
Не могу сказать, возможно это поменялось начиная с какого то релиза PostgreSQL
Возможно просто пробел в моем образовании, я помню что раньше в в файле скрипте для запуска сервиса, как то так
Environment=PGDATA=/home/postgres/data
-
Создание псевдонимов команд с помощью alias
Для конкретного пользователя можно добавить все необходимые команды в файл ~/.bashrc
Если вы хотите чтобы ваши алиасы linux были доступны для всех пользователей, необходимо использовать файл /etc/bashrc
На сервере 1С не помешает создать скрипт и сделать к нему алиас например status_1c
clear
systemctl status srv1cv8-8.3.хх.хххх@default --no-pager -l
echo -e "\n\n\n"
systemctl status ras-8.3.хх.хххх.service --no-pager -l
echo -e "\n\n\n"
systemctl status httpd --no-pager -l
Другие полезные алиасы
-
Терминалы ssh под Windows и не только
PuTTY дедушка все терминалов
putty-nd, kitty и еще бесконечное количество его форков, их ищите поиском в гугле.
MobaXterm на сегодняшний день и на мой взгляд лучший X server and SSH client
Но его активно теснит WindTerm, он стильный, модный молодежный и в нем не менее приятно работать
WinSCP классика жанра
Все имеют портабл версии, все имеют бесплатную версию или являются бесплатными и все достойны оказаться на флешке сисадмина.
-----
Список будет дополняться.
Пишите в комментариях, что посоветуете добавить.
Статья продолжает серию публикаций "Рецепты от Капитана" (буду благодарен если они вам пригодятся и вы проголосуете за них на определении проекта года):
- В облако на работу: Вишенка на торте. Быстродействие оборудования, нагрузочное тестирование, балансировка нагрузки
- Построение отказоустойчивого кластера 1С Предприятие 8.3. Требования назначения функциональности. MythBusters
- Построение отказоустойчивого кластера PostgreSQL для 1С. HAProxy, давай до свидания. Рецепты от Капитана
- В облако на работу: Архивирование postgres. Дайте два
- В облако на работу: Все варианты авторизации ОС сервером 1С на базе РЕД ОС 8 в домене windows. Рецепты от Капитана
- Бесплатный вебинар "В облаке, как дома: Как настроить рабочее место пользователя 1С на базе РЕД ОС"
- В облаке, как дома: Устраиваемся поудобнее. Рабочее место пользователя 1С на базе РЕД ОС (HTTPS и архивирование)
- Три пингвина под окном… Обзор рабочих мест пользователя 1С, собранных на отечественных дистрибутивах linux
- Три пингвина под окном… Точки над Ё. Обзор рабочих мест пользователя 1С, собранных на отечественных дистрибутивах linux
- Установка 1С: Сервера взаимодействия. Заметки на полях
- Сервер 1С: Предприятие на Ubuntu 16.04 и PostgreSQL 9.6, для тех, кто хочет узнать его вкус. Рецепт от Капитана обратите внимание на дату публикации
- 1С в 1cloud.ru. Теплое, ламповое, свое отчет о походе в питерский офис ©Serverspace когда он еще не был Serverspace
Серия "Рецепты от Капитана" на всякий случай
- Подготовка к экзамену 1С: Специалист по платформе. Рецепты от Капитана
- Настройка сборки данных в Performance Monitor Windows Server. Рецепты от Капитана
- Сервер 1С: Предприятие на Ubuntu 16.04 и PostgreSQL 9.6, для тех, кто хочет узнать его вкус. Рецепт от Капитана
Планы на будущее:
Начать новую серию: Рецепты 1С: ИТС.
В ней пройти интересные публикации ИТС и проверить насколько они работают "из коробки"
Возможно в новогодние каникулы)
Благодарности:
Благодарю компанию ©Serverspace за предоставленное оборудование, без поддержки собрать такой пингвинариум мне было бы негде.
Главный спонсор это питерская погода.
А вы как думаете, почему наш город дал миру столько великих ученых и писателей?
slavius
Так-то интересно:). Вот если-бы не странные две первые иллюстрации...
capitannemo Автор
Чем иллюстрации не подошли?