Практикум. Сервис systemd для Pangolin
Подготовка юнита
-
Проверьте, существует ли юнит systemd для управления экземпляром PostgreSQL:
sudo systemctl list-unit-files | grep postgres
Предполагается, что приведенная выше команда ничего не вернет. Если юнит уже имеется, переходите к пункту 2 лабораторной работы.
-
При отсутствии сервиса создайте его управляющий файл командой:
$ sudo tee /etc/systemd/system/postgresql.service << EOF
[Unit]
Description=Runners PostgreSQL service
After=syslog.target network.target
[Service]
Type=notify
Environment="PG_LICENSE_PATH=/opt/pangolin_license"
Environment="PG_PLUGINS_PATH=/usr/pangolin-6.2.0/lib"
Environment="PGCTLTIMEOUT=120"
Environment="LD_LIBRARY_PATH=/usr/pangolin-6.2.0/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=/usr/pangolin-6.2.0
ExecStart=/bin/bash -i -c "/usr/pangolin-6.2.0/bin/postgres -D /pgdata/06/data"
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOFЕсли копирование и выполнение этой команды вызывают затруднения, просто скопируйте выделенный цветом текст и вставьте его с помощью привычного текстового редактора в файл /etc/systemd/system/postgresql.service . При этом редактор должен быть запущен от имени суперпользователя ОС (с правами root).
Включение юнита и запуск сервиса
-
Проверьте правильность копирования:
$ cat /etc/systemd/system/postgresql.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=/usr/pangolin-6.2.0/lib"
Environment="PGCTLTIMEOUT=120"
Environment="LD_LIBRARY_PATH=/usr/pangolin-6.2.0/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=/usr/pangolin-6.2.0
ExecStart=/bin/bash -i -c "/usr/pangolin-6.2.0/bin/postgres -D /pgdata/06/data"
Restart=on-failure
[Install]
WantedBy=multi-user.target -
Перечитайте конфигурацию systemd:
$ sudo systemctl daemon-reload
-
Проверьте, подключился ли юнит postgresql.service:
$ sudo systemctl list-unit-files | grep postgresql postgresql.service enabled disabled
-
Запустите его, сконфигурировав его при этом для автозапуска:
$ sudo systemctl enable --now postgresql
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /etc/systemd/system/postgresql.service. -
Проверьте статус сервиса postgresql:
$ sudo systemctl status postgresql
● postgresql.service - Runners PostgreSQL service
Loaded: loaded (/etc/systemd/system/postgresql.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/postgresql.service
├─ 2915 /usr/pangolin-6.2.0/bin/postgres -D /pgdata/06/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.