Показаны сообщения с ярлыком systemd. Показать все сообщения
Показаны сообщения с ярлыком systemd. Показать все сообщения

воскресенье, 20 октября 2019 г.

Настройка systemd для запуска PostgreSQL 10 от 1С

Настройка systemd для запуска PostgreSQL от 1С

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory              Log file
10  main    5432 online postgres /var/lib/postgresql/10/main pg_log/postgresql-%a.log

#$ sudo pg_dropcluster --stop 10 main
$ sudo pg_ctlcluster 10 main stop
$ sudo su - postgres
$ /usr/lib/postgresql/10/bin/initdb --locale=ru_RU.utf8 /var/lib/postgresql/10/data
$ exit

$ sudo nano /etc/systemd/system/postgres.service

[Unit]
Description=PostgreSQL database server
After=network.target

[Service]
Type=forking
TimeoutSec=120
User=postgres
Group=postgres

Environment=PGROOT=/var/lib/postgresql/10

SyslogIdentifier=postgres
PIDFile=${PGROOT}/data/postmaster.pid
RuntimeDirectory=postgresql
RuntimeDirectoryMode=755

ExecStartPre= /usr/lib/postgresql/10/bin/pg_controldata ${PGROOT}/data
ExecStart= /usr/lib/postgresql/10/bin/pg_ctl -s -D ${PGROOT}/data start -w -t 120
ExecReload=/usr/lib/postgresql/10/bin/pg_ctl -s -D ${PGROOT}/data reload
ExecStop=  /usr/lib/postgresql/10/bin/pg_ctl -s -D ${PGROOT}/data stop -m fast

# Due to PostgreSQL's use of shared memory, OOM killer is often overzealous in
# killing Postgres, so adjust it downward
OOMScoreAdjust=-200

# Additional security-related features
PrivateTmp=true
ProtectHome=true
ProtectSystem=full
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

Сохранить.

$ sudo systemctl start postgres.service

После проверики

Удалить кластер main (займет порт 5432)  Удалит с Вашими данными!!!

$ sudo pg_dropcluster --stop 10 main   
$ sudo systemctl enable postgres.service

Команды:

$ sudo systemctl daemon-reload  # запускать после изменений файла
$ sudo systemctl start postgres.service
$ sudo systemctl stop postgres.service
$ sudo systemctl restart postgres.service
$ sudo systemctl status postgres.service

четверг, 3 января 2019 г.

Настройка systemd для запуска PostgreSQL от 1С

Платформа 8.3 → Ubuntu 16.04: PostgreSQL, версия 10.3-3.1C вопросы к разработчикам!
Вариант от Самарина Александра (Эника, Ивантеевка)
За что Александру огромное спасибо!

$ sudo nano /etc/systemd/system/postgres.service

[Unit]
Description=PostgreSQL database server
After=network.target

[Service]
Type=forking
TimeoutSec=120
User=postgres
Group=postgres

Environment=PGROOT=/var/lib/postgres

SyslogIdentifier=postgres
PIDFile=/var/lib/postgres/data/postmaster.pid
RuntimeDirectory=postgresql
RuntimeDirectoryMode=755

ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGROOT}/data
ExecStart= /usr/bin/pg_ctl -s -D ${PGROOT}/data start -w -t 120
ExecReload=/usr/bin/pg_ctl -s -D ${PGROOT}/data reload
ExecStop=  /usr/bin/pg_ctl -s -D ${PGROOT}/data stop -m fast

# Due to PostgreSQL's use of shared memory, OOM killer is often overzealous in
# killing Postgres, so adjust it downward
OOMScoreAdjust=-200

# Additional security-related features
PrivateTmp=true
ProtectHome=true
ProtectSystem=full
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

Сохранить.

Команды:

$ sudo systemctl daemon-reload  # запускать после изменений файла
$ sudo systemctl start postgres.service
$ sudo systemctl stop postgres.service
$ sudo systemctl restart postgres.service
$ sudo systemctl status postgres.service
 

Можно сравнить с shell-скриптом на любом дистрибутиве. Выиграет, думаю, только Gentoo и FreeBSD за счет огромных openrc и rc.subr. Но в них все равно есть отдельный init с костыльным inittab и runlevels, который поддерживается другими людьми, отдельно supervisord и daemon-start-stop, forever и т.п.

В случае 1C сервис на systemd адекватно отрабатывает любые действия с сервером 1С. Описание на 20 строк, все очевидны. А собственный скрипт от 1С не позволяет включить отладку и перезапустить сервер, т.к. при смене флагов он не может найти и убить процессы. Приходится сначала останавливать сервер, потом менять флаги, потом запускать сервер.

Я тоже не в восторге от pssssshulseaudio и systemd (в основном от сетевой части и systemd-nspawn), но свою задачу он выполняет и быстрее шелла.

А "ОС в ОС" нам и так хватает: firefox, chrome, grub и сама 1С.

Настройка systemd для запуска второго сервера 1С

Платформа 8.3 → Ручной запуск второй копии сервера 1С на linux ubuntu 16.04
Вариант от Самарина Александра (Эника, Ивантеевка)
За что Александру огромное спасибо!

Порты указаны стандартные не второго сервера!
Для проверки можно запустить так:
sudo /bin/su usr1cv8 -c "/opt/1C/v8.3/x86_64/ragent -d /home/usr1cv8/.1cv8/1C/1cv8 -port 1540 -regport 1541 -range 1560:1590 -seclev 0 -debug"


$ service srv1cv83 status
$ sudo  systemctl stop srv1cv83

$ sudo nano /etc/systemd/system/1cv83-something.service

#
# 1cv83.service
#

[Unit]
Description=1C:Enterprise Server
Wants=network.target
After=network.target

[Service]
Type=simple
Environment=LANG=ru_RU.UTF-8
Environment=TZ=Europe/Moscow
ExecStart=/opt/1C/v8.3/x86_64/ragent -d /home/usr1cv8/.1cv8/1C/1cv8 -port 1540 -regport 1541 -range 1560:1590 -seclev 0 -debug
Restart=always
RestartSec=3
User=usr1cv8

[Install]
WantedBy=multi-user.target


Сохранить.

Команды:

$ sudo systemctl daemon-reload  # запускать после изменений файла
$ sudo systemctl start 1cv83-something.service
$ sudo systemctl stop 1cv83-something.service
$ sudo systemctl restart 1cv83-something.service
$ sudo systemctl status 1cv83-something.service

Если хочется автоматический запуск:

$ sudo  systemctl enable 1cv83-something.service

Если хочется при этом отказаться от оригинального скрипта:
$ sudo  systemctl disable srv1cv83  # отключить автоматический запуск
$ sudo  systemctl mask srv1cv83  # запретить запуск вообще


Плюсы:
20 строк против 497
Можно изменить флаги и сделать restart. Оригинальный скрипт такого не умеет.
Сервер 1С автоматически перезапускается при падении
systemctl stop завершает мертвые rmngr и rphost, если помер агент

Минусы:
Это systemd
Не поддерживается разработчиками 1С

воскресенье, 16 апреля 2017 г.

Напишем свой systemd сервис для db2

# nano /usr/local/bin/db2.sh

# chmod +x /usr/local/bin/db2.sh

#!/bin/sh
    #
    # Startup script for DB2
    # by A.F.
    #


   DB2_USER=db2inst1

    ### BEGIN INIT INFO
    # Provides:       $DB2_USER
    # Required-Start: $network $remote_fs
    # Required-Stop: $network $remote_fs
    # Default-Start: 3
    # Default-Stop: 0 1 2 5 6
    # Short-Description: DB2 $DB2_USER job service
    # Description:  DB2 Instance $DB2_USER job service
    ### END INIT INFO

    # Find the name of the script
    NAME=`basename $0`

    start() {
        DB2_START=$"Starting ${NAME} service: "

        su - $DB2_USER -c '. ./sqllib/db2profile; \
            ./sqllib/adm/db2start > /dev/null'

        ret=$?
        if [ $ret -eq 0 ]
        then
                echo "$DB2_START Success."
        else
                echo "$DB2_START Failed!"
                exit 1
        fi
        echo
    }

    stop() {
        echo -n $"Stopping ${NAME} service: "

        su - $DB2_USER -c '. ./sqllib/db2profile; \
            ./sqllib/adm/db2stop > /dev/null'

        ret=$?
        if [ $ret -eq 0 ]
        then
                echo "Success."
        else
                echo "Failed!"
                exit 1
        fi
      echo
    }
    restart() {
        stop
        start
    }
    case "$1" in
        start)
            start
            ;;
        stop)
            stop
            ;;
        restart)
            restart
            ;;
        *)
            echo $"Usage: $0 {start|stop|restart}"
            exit 1
    esac
    exit 0


Сохранить.  
----------------------------------
 
# nano /etc/systemd/system/db2.service

[Unit] 
Description = db2 daemon 

[Service] 
Type = forking 
ExecStart = /usr/local/bin/db2.sh start 
ExecStop = /usr/local/bin/db2.sh stop 
ExecReload = /usr/local/bin/db2.sh restart 
[Install] 
WantedBy = multi-user.target 
  
Сохранить. 
---------------------------------- 
# systemctl start db2 
# systemctl status db2 
# systemctl enable db2 
!!!# systemctl disable db2
 
 

How to Create a new service with systemd 
Automatic Startup and Restart
Creating Red Hat Wildfly systemd service for Ubuntu 16.04 
Systemd: пишем собственные .service и .target 
systemd. Часть 1. Установка и использование  
9.6. Creating and Modifying systemd Unit Files 
 



 В юните можжно написать ExecStart=/bin/sh -c '/home/dts/bin/dts-service.sh'



пятница, 14 апреля 2017 г.

Установка db2 11.1 на ubuntu 16.04.2 lxc

Создадим контейнер
# lxc-create -t ubuntu -n xenial_lxc -- -r xenial -a amd64

Клонировать контейнер
# lxc-clone -o xenial_lxc -n db2_11_lxc

Сохранение контейнера xenial_lxc
# cd /var/lib/lxc/
# tar -cvzf xenial_lxc.tar.gz ./xenial_lxc

# cp /home/user/_soft/db2/v11.1_linuxx64_expc.tar.gz /var/lib/lxc/db2_11_lxc/rootfs/home/ubuntu
# cd /var/lib/lxc/db2_11_lxc/rootfs/home/ubuntu
# tar xvzf v11.1_linuxx64_expc.tar.gz
# rm -R  /var/lib/lxc/db2_11_lxc/rootfs/home/ubuntu/v11.1_linuxx64_expc.tar.gz

Старт контейнера
# lxc-start -n db2_11_lxc -d

Посмотреть ip
# lxc-ls -f

$ sudo su
# apt-get update -y
# apt-get upgrade -y
# apt-get install -y mc htop samba nano
# nano /etc/sysctl.conf
В конец файла:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

Сохранить.
# sysctl -p
Проверка:
# cat /proc/sys/net/ipv6/conf/all/disable_ipv6

# nano /etc/hosts
127.0.0.1   localhost
127.0.1.1   desktop_lxc

Сохранить.

Установка db2 утилитой db2_install
Зададим пользователей:

# groupadd db2iadm1
# useradd -g db2iadm1 -m -d /home/db2inst1 db2inst1
# passwd db2inst1

# groupadd db2fadm1
# useradd -g db2fadm1 -m -d /home/db2fenc1 db2fenc1
# passwd db2fenc1

# dpkg --add-architecture i386
# apt-get update
 Пакет libaio1 есть.
# apt-get install libx32stdc++6 -y
# apt-get install libpam0g:i386 -y
# apt-get install binutils -y
# apt-get install libnuma-dev -y

# cd /home/ubuntu/expc
# ./db2prereqcheck -v 11.1.0.0

инсталляция
# ./db2_install
#  rm -R /home/ubuntu/expc

Настройка db2 для работы с 1С

# cd /opt/ibm/db2/V11.1/instance
# ./db2icrt -u db2fenc1 db2inst1

# su - db2inst1

Конфигурируем DB2 для работы с 1С:

$ db2set DB2_WORKLOAD=1C

Запускаем экземпляр DB2:

При установке db2setup экземпляр db2 уже запущен, пропускаем

$ db2start
!!!без apt-get install libnuma-dev -y
!!!db2start: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No !!!such file or directory

Посмотреть версию DB2

$ db2ls

Посмотреть БД
$ db2ilist

$ exit

# cd /opt/ibm/db2/V11.1/instance
# ./db2iauto -on db2inst1

Итог db2 не запускается автоматом.
Напишем свой systemd сервис для db2

Скрипт
How to Auto Start more then one instance of DB2 in linux environment 

# nano /usr/local/bin/db2.sh

#!/bin/sh
    #
    # Startup script for DB2
    # by A.F.
    #


   DB2_USER=db2inst1

    ### BEGIN INIT INFO
    # Provides:       $DB2_USER
    # Required-Start: $network $remote_fs
    # Required-Stop: $network $remote_fs
    # Default-Start: 3
    # Default-Stop: 0 1 2 5 6
    # Short-Description: DB2 $DB2_USER job service
    # Description:  DB2 Instance $DB2_USER job service
    ### END INIT INFO

    # Find the name of the script
    NAME=`basename $0`

    start() {
        DB2_START=$"Starting ${NAME} service: "

        su - $DB2_USER -c '. ./sqllib/db2profile; \
            ./sqllib/adm/db2start > /dev/null'

        ret=$?
        if [ $ret -eq 0 ]
        then
                echo "$DB2_START Success."
        else
                echo "$DB2_START Failed!"
                exit 1
        fi
        echo
    }

    stop() {
        echo -n $"Stopping ${NAME} service: "

        su - $DB2_USER -c '. ./sqllib/db2profile; \
            ./sqllib/adm/db2stop > /dev/null'

        ret=$?
        if [ $ret -eq 0 ]
        then
                echo "Success."
        else
                echo "Failed!"
                exit 1
        fi
      echo
    }
    restart() {
        stop
        start
    }
    case "$1" in
        start)
            start
            ;;
        stop)
            stop
            ;;
        restart)
            restart
            ;;
        *)
            echo $"Usage: $0 {start|stop|restart}"
            exit 1
    esac
    exit 0

Сохранить.


# chmod +x /usr/local/bin/db2.sh

# nano /etc/systemd/system/db2.service

[Unit] 
Description = db2 daemon 

[Service] 
Type = forking 
ExecStart = /usr/local/bin/db2.sh start 
ExecStop = /usr/local/bin/db2.sh stop 
ExecReload = /usr/local/bin/db2.sh restart 
[Install] 
WantedBy = multi-user.target 
  
Сохранить. 
---------------------------------- 

# systemctl start db2
# systemctl status db2
# systemctl enable db2
!!!# systemctl disable db2

# reboot

Проверка
# ps -eaf|grep -i db2sysc

#  ps -eaf|grep -i db2sysc
db2inst1   694   692  0 09:41 ?        00:00:00 db2sysc
root       771   760  0 09:42 pts/4    00:00:00 grep --color=auto -i db2sysc

# poweroff

Сохранение контейнера db2_11_lxc
# cd /var/lib/lxc/
# tar -cvzf db2_11_lxc.tar.gz ./db2_11_lxc
__________________________________________________
Установка 1С

Клонировать контейнер # lxc-clone -o db2_11_lxc -n db2

# mkdir /var/lib/lxc/db2/rootfs/home/ubuntu/8.3.10.2168
# cp /home/user/_soft/8.3.10.2168/deb64.tar.gz /var/lib/lxc/db2/rootfs/home/ubuntu/8.3.10.2168/

Старт контейнера
# lxc-start -n db2 -d

Посмотреть ip
# lxc-ls -f

# ssh ubuntu@db2

$ sudo su

# su - db2inst1

Запускаем экземпляр DB2:
$ db2start
$ exit
# ps -eaf|grep -i db2sysc
db2inst1   754   752  0 15:42 pts/4    00:00:00 db2sysc
root       779   272  0 15:43 pts/4    00:00:00 grep --color=auto -i db2sysc

# apt-get install  imagemagick -y
Строка ниже срабатывает далеко не всегдаю
# apt-get install ttf-mscorefonts-installer -y
------------------------------------------------------------
Альтернативно:
# apt-get install wget -y
# mkdir /home/ubuntu/Downloads
# wget http://ftp.de.debian.org/debian/pool/contrib/m/msttcorefonts/ttf-mscorefonts-installer_3.6_all.deb -P /home/ubuntu/Downloads
# apt install /home/ubuntu/Downloads/ttf-mscorefonts-installer_3.6_all.deb
# fc-cache -f -v
------------------------------------------------------------


Дистрибутивы  в папке soft
!!!# ln -s /usr/lib/x86_64-linux-gnu/libMagickWand.so.5 /usr/lib/x86_64-linux-gnu/libMagickWand.so

# cd /home/ubuntu/8.3.10.2168/
# tar xvzf deb64.tar.gz
# dpkg -i 1c*.deb
# apt-get -f install
# apt autoremove -y
# cd .. 
# rm -R  /home/ubuntu/8.3.10.2168
# chown -R usr1cv8:grp1cv8 /opt/1C
Зададим пароль pass
# passwd usr1cv8
 Теперь создадим базу 1С на сервере DB2.
добавим пользователя usr1cv8 в группу доступа db2iadm1
# usermod -aG db2iadm1 usr1cv8
# echo ". /home/db2inst1/sqllib/db2profile" >> /home/usr1cv8/.profile
# service srv1cv83 start
# service srv1cv83 status
!!!# service srv1cv83 restart
# poweroff

Старт контейнера
# lxc-start -n db2 -d

Посмотреть ip
# lxc-ls -f

# ssh ubuntu@db2

!!!$ sudo su
!!!# su - db2inst1

!!!Запускаем экземпляр DB2:
!!!$ db2start
!!!$ exit
# ps -eaf|grep -i db2sysc

!!!# service srv1cv83 start
# service srv1cv83 status

Создадим базу


# poweroff

Сохранение контейнера db2
# cd /var/lib/lxc/
# tar -cvzf db2.tar.gz ./db2

Восстановление контейнера
!!!# cd /var/lib/lxc
!!!# tar xvzf db2.tar.gz

Старт контейнера # lxc-start -n db2 -d

Посмотреть ip
# lxc-ls -f



Клонирование контейнера с заменой кластера 1с
Клонировать контейнер
# lxc-clone -o db2 -n db2_1
Почистить кластер 1с
# rm -R /var/lib/lxc/db2_1/rootfs/home/usr1cv8/.1cv8
Создадим базу (база подхватится из клонируемого контейнера):

Сохранение контейнера db2_1
# cd /var/lib/lxc/
# tar -cvzf db2_1.tar.gz ./db2_1

Восстановление контейнера
!!!# cd /var/lib/lxc
!!!# tar xvzf db2_1.tar.gz

.