Я собираюсь перезапустить службу postgresql 12, запущенную в Ubuntu 18. Сначала я проверяю ее статус: sudo service postgresql status
. Она говорит:
postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; disabled; vendor pres
Active: inactive (dead)
lines 1-3/3 (END)...skipping...
postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Хоть он и кажется неактивным, но я все равно могу подключиться.
Затем я запускаю еще одну проверку: systemctl status postgresql@12-main
там написано:
root@db-services:/# systemctl status postgresql@12-main
● [email protected] - PostgreSQL Cluster 12-main
Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/[email protected]
└─override.conf
Active: active (running) since Mon 2022-06-13 09:02:25 WIB; 5 months 27 days ago
Main PID: 5807 (postgres)
Tasks: 86 (limit: 4915)
CGroup: /system.slice/system-postgresql.slice/[email protected]
├─ 1586 postgres: 12/main: postgres db_sync 10.100.3.248(61414) idle
├─ 1588 postgres: 12/main: postgres db_sync 10.100.3.248(61415) idle
├─ 1606 postgres: 12/main: docreg db_docreg 10.100.8.150(18385) idle
├─ 1607 postgres: 12/main: docreg db_docreg 10.100.8.150(18399) idle
├─ 1608 postgres: 12/main: docreg db_docreg 10.100.8.150(18401) idle
├─ 1609 postgres: 12/main: docreg db_docreg 10.100.8.150(18421) idle
├─ 2592 postgres: 12/main: docudigtl db_docudigtl 10.100.8.112(34956) idle
├─ 3518 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(48290) idle
├─ 5150 postgres: 12/main: docudigtl db_docudigtl 10.100.7.114(61504) idle
├─ 5807 /usr/lib/postgresql/12/bin/postgres -D /data/postgresql/12/main -c config_file=/etc/postgresql/12/main/postgresql.co
├─ 5883 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(48626) idle
├─ 6316 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(48704) idle
├─ 7049 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(48870) idle
├─ 7986 postgres: 12/main: docudigtl db_docudigtl 10.100.7.114(56240) idle
├─ 8146 postgres: 12/main: docudigtl db_docudigtl 10.100.8.114(47432) idle
├─ 8183 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(49022) idle
├─ 8360 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(49036) idle
├─ 8445 postgres: 12/main: docudigtl db_docudigtl 10.100.8.114(47478) idle
├─ 9590 postgres: 12/main: docudigtl db_docudigtl 10.100.8.106(56094) idle
├─ 9687 postgres: 12/main: docudigtl db_docudigtl 10.100.8.112(50980) idle
├─10148 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(40646) idle
├─10324 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(40680) idle
├─11079 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(49496) idle
├─11602 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(58152) idle
├─11886 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(44674) idle
├─12106 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(49618) idle
├─13112 postgres: 12/main: docudigtl db_docudigtl 10.100.6.145(55014) idle
├─13122 postgres: 12/main: docudigtl db_docudigtl 10.100.6.145(55015) idle
├─13145 postgres: 12/main: docudigtl db_mysapk 10.100.6.145(55016) idle
├─13202 postgres: 12/main: docudigtl db_docudigtl 10.100.7.114(62073) idle
├─13945 postgres: 12/main: checkpointer
├─13946 postgres: 12/main: background writer
├─13947 postgres: 12/main: walwriter
├─13948 postgres: 12/main: autovacuum launcher
├─13949 postgres: 12/main: stats collector
├─13950 postgres: 12/main: logical replication launcher
Так что он на самом деле активен!
- В чем разница между этими двумя командами?
- Какой из них следует использовать для перезапуска:
systemctl restart postgresql@12-main
ИЛИsudo service postgresql restart
?
решение1
Существуют специальные службы systemd, которые называютсяшаблонные услуги.
Служба шаблонов может принимать такой аргумент: template_service@argument
.
Шаблонная служба никогда не запускается сама по себе, но может быть создана с заданным аргументом. Это означает, что одна и та же (шаблонная) служба может быть запущена в нескольких экземплярах, каждый из которых идентифицируется своим аргументом. Например:
systemctl запустить template_service@a
systemctl запустить template_service@b
systemctl запустить template_service@c
В Debian и некоторых производных дистрибутивах (например, Ubuntu):
Каждый экземпляр PostgreSQL (кластер) принадлежит инстанцированному postgresql@
шаблонному сервису. Аргумент сервиса postgresql@
принимает форму version-clustername
.
Так, например, postgresql@12-main
есть служба systemd, которая представляет экземпляр сервера PostgreSQL 12 (кластер) с именем кластера main
(которое является именем по умолчанию).
Есть еще одна служба systemd, которая называется просто postgresql
. Это своего рода служба catch-all. Если вы ее запустите или остановите, все экземпляры PostgreSQL будут запущены или остановлены (это поведение можно отключить вstart.conf
).
Однако вы не можете использовать systemctl status postgresql
для проверки того, запущены ли какие-либо службы PostgreSQL, даже если в вашей системе настроен только один сервер PostgreSQL. Вам всегда следует проверять статус конкретной инстанцированной службы для получения осмысленного отчета о статусе.
Theservice
команда использовалась для старой системы init (SysV init), до появления systemd. Она все еще работает для обратной совместимости, но вам действительно следует использовать эту systemctl
команду в системах, где доступен systemd.