Після оновлення 14.04 до 16.04.1 сервер Postgresql не запускається


24

Щойно оновив мою систему з 14.04. LTS до 16.04.1 LTS, postgresql не запускається на systemd:

/etc/init.d/postgresql start                                                                                                                                                                              
[ ok ] Starting postgresql (via systemctl): postgresql.service

# /etc/init.d/postgresql status                                                                                                                                                                             
● postgresql.service - PostgreSQL RDBMS
  Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor     preset: enabled)
  Active: active (exited) since Вт 2016-08-09 13:40:51 MSK; 3min 23s ago
  Process: 23142 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
  Main PID: 23142 (code=exited, status=0/SUCCESS)Seems that 

Здається, що системний скрипт містить неправильні дані:

# cat /lib/systemd/system/postgresql.service                                                                                                                                                                
# systemd service for managing all PostgreSQL clusters on the system. This
# service is actually a systemd target, but we are using a service since
# targets cannot be reloaded.

[Unit]
Description=PostgreSQL RDBMS

[Service]
Type=oneshot
ExecStart=/bin/true
ExecReload=/bin/true
RemainAfterExit=on

[Install]
WantedBy=multi-user.target

Яким має бути правильний скрипт для postgresql?

Відповіді:


9

Це має вийти з поля, якщо ви вказали правильну версію та назву кластера.

Скажімо, ви працюєте з версією, 9.5і кластер називається main:

Початок: systemctl start postgresql@9.5-main

Стій: systemctl stop postgresql@9.5-main

Статус: systemctl status postgresql@9.5-main

Увімкнути автозапуск під час завантаження: systemctl enable postgresql@9.5-main

Вимкнути автозапуск при завантаженні: systemctl disable postgresql@9.5-main

foo@postgres:~$ systemctl status postgresql@9.5-main
●  postgresql@9.5-main.service - PostgreSQL Cluster 9.5-main
   Loaded: loaded (/lib/systemd/system/postgresql@.service; disabled; vendor preset: enabled)
   Active: active (running) since Fri 2017-03-31 17:44:46 CEST; 59s ago
   Main PID: 4546 (postgres)
   CGroup: /system.slice/system-postgresql.slice/postgresql@9.5-main.service
           ├ ─ 4546 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.5/main -c config_file=/etc/postgresql/9.5/main/postgresql.conf
           ├ ─ 4548 postgres: checkpointer process
           ├ ─ 4549 postgres: writer process
           ├ ─ 4550 postgres: wal writer process
           ├ ─ 4551 postgres: autovacuum launcher process
           └ ─ 4552 postgres: stats collector process

Mar 31 17:44:44 postgres postgres[4546]: [1-2] 2017-03-31 17:44:44 CEST [4546] @ HINT:  Future log output will go to log destination "syslog".
Mar 31 17:44:44 postgres postgres[4547]: [2-1] 2017-03-31 17:44:44 CEST [4547] @ LOG:  database system was shut down at 2017-03-31 17:44:43 CEST
Mar 31 17:44:44 postgres postgres[4547]: [3-1] 2017-03-31 17:44:44 CEST [4547] @ LOG:  MultiXact member wraparound protections are now enabled
Mar 31 17:44:44 postgres postgres[4546]: [2-1] 2017-03-31 17:44:44 CEST [4546] @ LOG:  database system is ready to accept connections
Mar 31 17:44:44 postgres postgres[4551]: [2-1] 2017-03-31 17:44:44 CEST [4551] @ LOG:  autovacuum launcher started
Mar 31 17:44:45 postgres postgres[4553]: [3-1] 2017-03-31 17:44:45 CEST [4553] [unknown]@[unknown] LOG:  incomplete startup packet
Mar 31 17:44:46 postgres systemd[1]: Started PostgreSQL Cluster 9.5-main.
Mar 31 17:44:47 postgres systemd[1]: Reloading PostgreSQL Cluster 9.5-main.
Mar 31 17:44:47 postgres postgres[4546]: [3-1] 2017-03-31 17:44:47 CEST [4546] @ LOG:  received SIGHUP, reloading configuration files
Mar 31 17:44:47 systemd[1]: Reloaded PostgreSQL Cluster 9.5-main.

Можна довести, що це робота. Як я можу налаштувати systemd для автоматичного запуску?
Артур Ешенбренер

1
systemctl enable postgresql@9.5-mainце все, що вам потрібно.
мальте

1
Щойно оновлено postgresql з 9,6 до 10,0, і знову потрапив у цю проблему. Випробували своє рішення і можете довести: воно працює.
Артур Ешенбренер

Витягнутий з відповіді Kemin нижче: ви можете використовувати, наприклад, systemctl edit postgresql@9.6-mainдля створення файлу переосмислення із системними директивами, такими як: [Service] Nice = 15 IOSchedulingClass = 2 IOSchedulingPriority = 7
GreenReaper

14

Systemd повинен використовувати скрипт від /etc/init.d. Натомість systemd використовує якийсь файл шаблону. Щоб виправити це, виконайте такі дії:

  1. Видалити недійсний сценарій служби:

    # rm /lib/systemd/system/postgresql.service

  2. Перезавантажити сценарії демонів:

    # systemctl daemon-reload

  3. Увімкнути послугу postgresql:

    # systemctl enable postgresql

Після цього, ви могли б почати Postgres з будь-якими бажаними варіантами: sudo systemctl start postgresql, sudo service postgresql startабо sudo /etc/init.d/postgresql start. Для того, щоб перевірити , що на насправді запуск PostgreSQL, будь ласка , перевірте стан служби: sudo systemctl status postgresql. Це може виглядати так:

% sudo systemctl status postgresql                                                                                                                                                                          
● postgresql.service - LSB: PostgreSQL RDBMS server
   Loaded: loaded (/etc/init.d/postgresql; bad; vendor preset: enabled)
   Active: active (running) since Пт 2016-08-12 10:13:43 MSK; 1h 37min ago
     Docs: man:systemd-sysv-generator(8)
   CGroup: /system.slice/postgresql.service
           ├─4086 /usr/lib/postgresql/9.5/bin/postgres -D     /var/lib/postgresql/9.5/main -c  config_file=/etc/postgresql/9.5/main/postgresql.conf
           ├─4099 postgres: checkpointer process                                                                                              
           ├─4100 postgres: writer process                                                                                                    
           ├─4101 postgres: wal writer process                                                                                                
           ├─4102 postgres: autovacuum launcher process                                                                                       
           └─4103 postgres: stats collector process                                                                                           

авг 12 10:13:40 ubuntu-precise systemd[1]: Starting LSB: PostgreSQL RDBMS server...
авг 12 10:13:40 ubuntu-precise postgresql[4009]:  * Starting PostgreSQL 9.5 database server
авг 12 10:13:43 ubuntu-precise postgresql[4009]:    ...done.
авг 12 10:13:43 ubuntu-precise systemd[1]: Started LSB: PostgreSQL RDBMS server.

1
Це має бути неправильним. Systemd справді працює. Починається мій кластер 9.3 просто чудово; він просто не запустить мій кластер 9.5. Це недійсний скрипт служби, це цільовий скрипт, який вони викликали службу, щоб зробити її доступною для завантаження. Потворні хаки не здаються правильним способом зробити це, але це справді повинно спричинити systemctl _action_ postgresql@_version_запуск
Auspex

Я не знаю, чи це некрасивий злом (це, мабуть, так), але у мене була та сама проблема з постфіксом, і ця відповідь, здається, вирішує мою проблему.
децибайт

На thesystemctl enable postgresql я отримав таку помилку: postgresql.service не є рідною службою, перенаправлення на systemd-sysv-install Executing / lib / systemd / systemd-sysv-install enable postgresql insserv: fopen (.depend.stop): дозвіл відмовлено insserv: fopen (.depend.stop): у дозволі відмовлено. Мабуть, це не працює з моєю установкою.
Кемін Чжоу

1

У мене була та сама проблема після очищення postges9 та встановлення 10 на моєму ubuntu16. Спочатку я редагував файл /lib/systemd/system/postgresql.service із таким вмістом:

[Unit]
Description=PostgreSQL RDBMS

[Service]
Type=notify
User=postgres
ExecStart=/usr/lib/postgresql/10/bin/postgres -D /analysis2/postgresql/data
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0

[Install]
WantedBy=multi-user.target

І я можу використовувати перезапуск / зупинку / початок systemctl для управління службою postgresql. Однак чомусь вищезазначений файл перезаписався (можливо, після оновлення системи), і я не міг більше запускати команду systemctl для запуску та зупинки сервера postgresql. Після читання я зрозумів, що ви не повинні редагувати вищезазначений файл. Натомість слід використовувати systemctl edit foo, щоб перезаписати параметри за замовчуванням. Після додержання рішення, запропонованого наступним посиланням, моя система, здається, працює належним чином з postgresql.

Як мені замінити або налаштувати системні служби?


-2

Не найприємніше рішення, але це вирішує проблему, не занурюючись ні в що. Додайте це до cron:

@reboot sleep 5; systemctl start postgresql
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.