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

PostgreSQL не прослушивает локальный eth1 после перезагрузки

У меня есть сервер с двумя сетевыми интерфейсами - глобальным на eth0 и локальным на eth1 с IP, например 10.181.xx.xx. Запуск Ubuntu 16.04.

Я настроил PostgreSQL для прослушивания этого локального адреса, чтобы другой сервер из сети мог получить к нему доступ.

Проблема в том, что когда я перезагружаю сервер БД, PostgreSQL не может привязаться к этому локальному адресу. Имея это в postgresql.log:

2016-07-01 15:06:09 GMT LOG:  could not bind IPv4 socket: Cannot assign   requested address
2016-07-01 15:06:09 GMT HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2016-07-01 15:06:09 GMT WARNING:  could not create listen socket for "10.181.xx.xx"

После выполнения service postgresql restart все работает.

Как я могу заставить Postgres ждать, пока eth1 не загрузится после перезагрузки, и привязаться к нему?

Посмотрел в /var/log/syslog и выяснил, что это проблема с systemd последовательность запуска.

Добавлено

After=network-online.target

линия в /lib/systemd/system/postgresql@.service к [Unit] раздел

Вот так это выглядит:

[Unit]
Description=PostgreSQL Cluster %i
ConditionPathExists=/etc/postgresql/%I/postgresql.conf
PartOf=postgresql.service
ReloadPropagatedFrom=postgresql.service
Before=postgresql.service
After=network-online.target

Все заработало - PostgreSQL теперь загружается после подключения сети.

Я столкнулся с той же проблемой, и решение из принятого ответа сработало для меня. Однако я провел дополнительное исследование и выяснил, что в моем случае проблема возникает только в том случае, если я явно укажу IP-адрес в postgresql.conf:

listen_addresses = '10.181.xx.xx'

Когда я изменил конфигурацию для прослушивания всех адресов, проблема исчезла:

listen_addresses = '*'