Назад | Перейти на главную страницу

Как я могу заставить PostgreSQL запускаться после настройки сети на Ubuntu Server 16?

PostgreSQL не может привязать сокет, потому что он запускается до настройки сети.

Я использую Ubuntu Server 16.04.1 LTS и PostgreSQL 9.5. Я прочитал много документов в Интернете, но ничто не решило мою проблему.

Я почти уверен, что проблема в следующем: Служба PostgreSQL пытается создать сокет до того, как сетевой интерфейс будет правильно настроен.

sudo systemctl status postgresql@9.5-main.service
● postgresql@9.5-main.service - PostgreSQL Cluster 9.5-main
   Loaded: loaded (/lib/systemd/system/postgresql@.service; disabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Wed 2016-07-27 09:42:36 UTC; 1min 43s ago
  Process: 5274 ExecStart=postgresql@%i --skip-systemctl-redirect %i start (code=exited, status=1/FAILURE)

Jul 27 09:42:34 airpy-server systemd[1]: Starting PostgreSQL Cluster 9.5-main...
Jul 27 09:42:36 airpy-server postgresql@9.5-main[5274]: The PostgreSQL server failed to start. Please check the log outp
Jul 27 09:42:36 airpy-server postgresql@9.5-main[5274]: 2016-07-27 09:42:36 UTC [5332-1] LOG:  could not bind IPv4 socke
Jul 27 09:42:36 airpy-server postgresql@9.5-main[5274]: 2016-07-27 09:42:36 UTC [5332-2] HINT:  Is another postmaster al
Jul 27 09:42:36 airpy-server postgresql@9.5-main[5274]: 2016-07-27 09:42:36 UTC [5332-3] WARNING:  could not create list
Jul 27 09:42:36 airpy-server postgresql@9.5-main[5274]: 2016-07-27 09:42:36 UTC [5332-4] FATAL:  could not create any TC
Jul 27 09:42:36 airpy-server systemd[1]: postgresql@9.5-main.service: Control process exited, code=exited status=1
Jul 27 09:42:36 airpy-server systemd[1]: Failed to start PostgreSQL Cluster 9.5-main.
Jul 27 09:42:36 airpy-server systemd[1]: postgresql@9.5-main.service: Unit entered failed state.
Jul 27 09:42:36 airpy-server systemd[1]: postgresql@9.5-main.service: Failed with result 'exit-code'.

Я должен использовать DHCP (и я не могу его изменить) с фиксированной арендой. Поскольку я установил listen_address='fixed_ip' в postgresql.conf кластер не запускается при загрузке. Так все началось ...

И я потратил два дня, пытаясь заставить postgreSQL безуспешно ждать конфигурации сети. Он отлично работал на Ubuntu Server 14.04 (мне нечего было настраивать), а теперь он просто не работает для нового выпуска LTS.

По крайней мере, я пробовал эти отведения:

Как я могу заставить PostgreSQL запускаться после настройки сети на Ubuntu Server 16?

Спасибо за помощь

Использование новых systemctl диспетчер служб, вы можете заставить службу ждать активности сети до ее запуска. Это достигается путем редактирования файла служебной единицы (см. /etc/systemd/system/) и добавив следующие строки в unit раздел:

[Unit]

Wants=network-online.target
After=network-online.target

Затем перезагрузите сервис с новой конфигурацией:

systemctl reload name.service

Перезагрузите систему, чтобы убедиться, что она ждет сети перед запуском службы.

В служебном файле (/etc/init.d/<service>) вы можете указать, после чего должен запускаться PostGre. Это было бы так:

#! /bin/sh
### BEGIN INIT INFO
# Provides:             sshd
# Required-Start:       $remote_fs $syslog
# Required-Stop:        $remote_fs $syslog
# Default-Start:        2 3 4 5
# Default-Stop:
# Short-Description:    OpenBSD Secure Shell server
### END INIT INFO

В поле Required-start можно указать networking