После обновления 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 

Кажется, что скрипт systemd содержит неверные данные:

# 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.
Malte
источник
Могу доказать, что это работа. Как я могу настроить systemd для автоматического запуска этого?
Артур Эшенбренер,
1
systemctl enable postgresql@9.5-mainэто все, что тебе нужно.
мальте
1
Просто обновил postgresql с 9.6 до 10.0 и снова решил эту проблему. Опробовал ваше решение и могу доказать: оно работает.
Артур Эшенбренер,
Извлечено из ответа Кемина ниже: вы можете использовать, например, systemctl edit postgresql@9.6-mainдля создания файла переопределения с такими директивами systemd, как: [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
Я не знаю, является ли это уродливым хаком (возможно, так оно и есть), но у меня была та же проблема с постфиксом, и этот ответ, похоже, решил мою проблему.
децибайт
При включении systemctl postgresql я получил следующую ошибку: postgresql.service не является нативным сервисом, перенаправляя на systemd-sysv-install Выполнение / 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 restart / stop / start для управления сервисом postgresql. Однако по какой-то причине указанный выше файл был перезаписан (возможно, после обновления системы), и я больше не мог запускать команду systemctl для запуска и остановки сервера postgresql. После некоторого прочтения я понял, что вы не должны редактировать вышеуказанный файл. Вместо этого вы должны использовать systemctl edit foo, чтобы перезаписать значения по умолчанию. После решения, предложенного по следующей ссылке, моя система, похоже, работает должным образом с postgresql.

Как переопределить или настроить службы systemd?

Кемин Чжоу
источник
-2

Не самое лучшее решение, но это решает проблему, не углубляясь ни во что. Добавьте это в cron:

@reboot sleep 5; systemctl start postgresql
user3136936
источник