Перейти к основному содержимому

Сервис systemd для СУБД Pangolin

примечание

Юнит автоматически создается при работе скриптов автоматизации.

В наборе скриптов, что относятся к инсталлятору лежит пример юнита: installer/roles/pangolin_dbms/templates/postgresql.service.j2.

С помощью данного сервис файла добавляется удобство в управлении остановки/запуска/перезагрузки СУБД.

Подготовка юнита

  1. Проверьте, существует ли юнит systemd для управления экземпляром PostgreSQL:

    sudo systemctl list-unit-files | grep postgres

    При отсутствии юнита приведенная выше команда ничего не вернет. Если юнит уже имеется, переходите к разделу «Включение юнита и запуск сервиса».

  2. При отсутствии сервиса создайте его. Скопируйте шаблон сервиса созданного при установке серверной части СУБД:

    cp /opt/pangolin-dbms-server/share/pangolin-dbms.service /etc/systemd/system
  3. Отредактируйте файл /etc/systemd/system/pangolin-dbms.service с помощью текстового редактора. При этом редактор должен быть запущен от имени суперпользователя ОС (с правами root).

    Требуется изменить путь до $PGDATA (после ключа -D) на актуальный.

    ...
    ExecStart=/opt/pangolin-dbms-server/bin/postgres -D /pgdata/data...
    ...

Включение юнита и запуск сервиса

  1. Проверьте корректность содержимого файла:

    cat /etc/systemd/system/pangolin-dbms.service
        [Unit]
    Description=Runners PostgreSQL service After=syslog.target network.target

    [Service]
    Type=notify
    Environment="PG_LICENSE_PATH=/opt/pangolin-license"
    Environment="PG_PLUGINS_PATH=/opt/pangolin-dbms-server-7/lib"
    Environment="PGCTLTIMEOUT=120"
    Environment="LD_LIBRARY_PATH=/opt/pangolin-dbms-server-7/lib"
    LimitNOFILE=65536

    # Pre-commands to start watchdog device
    User=postgres
    Group=postgres
    PermissionsStartOnly=true

    ExecStartPre=/bin/mkdir -p /var/run/postgresql
    ExecStartPre=/bin/chown -R postgres:postgres /var/run/postgresql
    ExecReload=/bin/kill -HUP $MAINPID
    WorkingDirectory=/opt/pangolin-dbms-server-7
    ExecStart=/bin/bash -i -c "/opt/pangolin-dbms-server-7/bin/postgres -D /pgdata/07/data"
    Restart=on-failure

    [Install]
    WantedBy=multi-user.target
  2. Перечитайте конфигурацию systemd:

    sudo systemctl daemon-reload
  3. Проверьте, подключился ли юнит pangolin-dbms.service:

    sudo systemctl list-unit-files | grep pangolin-dbms

    pangolin-dbms.service enabled disabled
  4. Запустите его, сконфигурировав его при этом для автозапуска:

    sudo systemctl enable --now pangolin-dbms
    Created symlink /etc/systemd/system/multi-user.target.wants/pangolin-dbms.service → /etc/systemd/system/pangolin-dbms.service.
  5. Проверьте статус сервиса pangolin-dbms:

    sudo systemctl status pangolin-dbms

    Пример успешного результата:

       ● pangolin-dbms.service - Runners PostgreSQL service
    Loaded: loaded (/etc/systemd/system/pangolin-dbms.service; enabled; vendor
    preset: disabled)
    Active: active (running) since Sun 2024-12-08 19:08:00 MSK; 1min 37s ago
    Process: 2913 ExecStartPre=/bin/mkdir -p /var/run/postgresql (code=exited,
    status=0/SUCCESS)
    Process: 2914 ExecStartPre=/bin/chown -R postgres:postgres
    /var/run/postgresql (code=exited, status=0/SUCCESS)
    Main PID: 2915 (postgres)
    Tasks: 10 (limit: 4652)
    Memory: 32.7M
    CPU: 329ms
    CGroup: /system.slice/pangolin-dbms.service
    ├─ 2915 /opt/pangolin-dbms-server-7/bin/postgres -D /pgdata/07/data
    ├─ 2939 "postgres: checkpointer " "" "" "" "" "" "" "" "" "" "" ""
    "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
    ├─ 2940 "postgres: background writer " "" "" "" "" "" "" "" "" ""
    "" "" "" "" "" "" "" "" "" "" "" "" "" ""
    ├─ 2942 "postgres: idle sessions terminator " "" "" "" "" "" "" ""
    "" "" "" "" "" "" "" "" ""
    ├─ 2943 "postgres: walwriter " "" "" "" "" "" "" "" "" "" "" "" ""
    "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
    ├─ 2944 "postgres: license checker " "" "" "" "" "" "" "" "" "" ""
    "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
    ├─ 2945 "postgres: autovacuum launcher " "" "" "" "" "" "" "" "" ""
    "" "" "" "" "" "" "" "" "" "" "" ""
    ├─ 2946 "postgres: autounite launcher " "" "" "" "" "" "" "" "" ""
    "" "" "" "" "" "" "" "" "" "" "" "" ""
    ├─ 2947 "postgres: integrity check launcher " "" "" "" "" "" "" ""
    "" "" "" "" "" "" "" "" ""
    └─ 2948 "postgres: logical replication launcher " "" "" "" "" "" ""
    "" "" "" "" "" ""
    Dec 08 19:08:00 p620.class.edu bash[2915]: 2024-12-08 19:08:00.511 MSK [2915]
    LOG: listening on IPv4 address "0.0.0.0", port 5432
    Dec 08 19:08:00 p620.class.edu bash[2915]: 2024-12-08 19:08:00.511 MSK [2915]
    LOG: listening on IPv6 address "::", port 5432
    Dec 08 19:08:00 p620.class.edu bash[2915]: 2024-12-08 19:08:00.519 MSK [2915]
    LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
    Dec 08 19:08:00 p620.class.edu bash[2941]: 2024-12-08 19:08:00.526 MSK [2941]
    LOG: database system was shut down at 2024-12-08 19:07:38 MSK
    Dec 08 19:08:00 p620.class.edu bash[2942]: 2024-12-08 19:08:00.527 MSK [2942]
    LOG: idle terminator started
    Dec 08 19:08:00 p620.class.edu bash[2944]: 2024-12-08 19:08:00.564 MSK [2944]
    LOG: License checker started
    Dec 08 19:08:00 p620.class.edu bash[2915]: 2024-12-08 19:08:00.575 MSK [2915]
    LOG: database system is ready to accept connections
    Dec 08 19:08:00 p620.class.edu bash[2947]: 2024-12-08 19:08:00.576 MSK [2915]
    LOG: Start integrity check launcher
    Dec 08 19:08:00 p620.class.edu bash[2947]: 2024-12-08 19:08:00.579 MSK [2947]
    LOG: Start of integrity check
    Dec 08 19:08:00 p620.class.edu systemd[1]: Started Runners PostgreSQL service.