Имеется комп с PostgreSQL.
У него на eth0 несколько подсетей (далее нужна будет подсеть 222):
> ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 1c:6f:65:96:54:bc brd ff:ff:ff:ff:ff:ff
inet 192.168.1.95/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
...
inet 192.168.222.95/24 brd 192.168.222.255 scope global eth0:7
valid_lft forever preferred_lft forever
Чтобы PostgreSQL слушал порт на 222 подсети, сделана настройка:
Файл: /etc/postgresql/9.6/main/postgresql.conf
listen_addresses = 'localhost,192.168.222.95'
и
Файл: /etc/postgresql/9.6/main/pg_hba.conf
host all all 192.168.222.0/24 md5
Если после внесения этих настроек перезапустить сервис postgresql, то все стартует без ошибок, а порт 5432 слушается на IP-шниках 127.0.0.1 и на 192.168.222.95.
Но если перезагрузить компьютер, то порт 5432 на IP 192.168.222.95 не поднимается.
В логах следующие ошибки:
СООБЩЕНИЕ: не удалось привязаться к сокету IPv6: Невозможно назначить запрошенный адрес
ПОДСКАЗКА: Возможно порт 5432 занят другим процессом postmaster? Если нет, повторите попытку через несколько секунд.
СООБЩЕНИЕ: не удалось привязаться к сокету IPv4: Невозможно назначить запрошенный адрес
ПОДСКАЗКА: Возможно порт 5432 занят другим процессом postmaster? Если нет, повторите попытку через несколько секунд.
ПРЕДУПРЕЖДЕНИЕ: не удалось создать принимающий сокет для "192.168.222.95"
СООБЩЕНИЕ: передача вывода в протокол процессу сбора протоколов
ПОДСКАЗКА: В дальнейшем протоколы будут выводиться в каталог "pg_log".
Вот здесь я нашел возможную причину: говорят что сервис postgresql стартует раньше, чем инитится сеть, поэтому не на локальном IP PostgreSQL не может подняться.
Тогда я проверяю зависимости сервиса postgresql:
# systemctl list-dependencies postgresql
postgresql.service
● ├─postgresql@9.6-main.service
● ├─postgresql@9.6-main.service
● ├─system.slice
● ├─network-online.target
● │ ├─connman-wait-online.service
● │ └─networking.service
● └─sysinit.target
● ├─dev-hugepages.mount
● ├─dev-mqueue.mount
● ├─keyboard-setup.service
...
Видно, что postgresql@9.6-main.service и network-online.target запускаются в параллель, а надо сделать зависимую загрузку.
Поэтому создаю файл /etc/systemd/system/postgresql.service.d/override.conf следующего содержания:
[Unit]
Requires=network-online.target
After=network-online.target
Потом выполняю:
systemctl daemon-reload
systemctl restart postgresql
И смотрю зависимости через list-dependencies, а они не изменились. Перезагружаюсь - то же самое, зависимости все те же, и PostgreSQL не поднимает свой сокет на 192.168.222.95.
Вопрос: где что еще надо крутить?