На двух разных серверах у меня установлены redis и postgresdb. Ни один из них не запустится успешно при загрузке, но запустится, если они будут запущены / перезапущены вручную. Ошибка для обоих то же самое (сбой привязки к адресу). Вот пример журнала postgres:
2021-05-27 21:12:39.703 UTC [682] LOG: starting PostgreSQL 12.6 (Ubuntu 12.6-0ubuntu0.20.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit
2021-05-27 21:12:39.704 UTC [682] LOG: listening on IPv4 address "127.0.0.1", port 5432
2021-05-27 21:12:39.707 UTC [682] LOG: could not bind IPv4 address "192.168.86.222": Cannot assign requested address
2021-05-27 21:12:39.707 UTC [682] HINT: Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
и redis:
653:M 27 May 2021 21:12:23.090 # Could not create server TCP listening socket 192.168.86.234:6379: bind: Cannot assign requested address
машины работают на отдельном оборудовании, но обе работают с одной и той же версией ubuntu (20.04.2 LTS). Эти IP-адреса являются статическими для этих машин, поэтому больше их не использует, и тот факт, что я могу найти их сразу после загрузки (когда я перезапускаю службы), заставляет меня думать, что это не тот случай, когда адрес фактически используется где-то еще. . Я не совсем уверен, в чем причина проблемы. Я предполагаю, что службы пытаются запустить до того, как сетевая служба будет полностью запущена / настроена, но я не знаю, как это проверить или подтвердить. Любые идеи или предложения?
Вы можете попробовать перечислить зависимости (используя ufw в качестве примера):
$ systemctl list-dependencies ufw
ufw.service
● └─system.slice
$
Или просмотрите Информация о модульном файле (снова для ufw):
$ systemctl cat ufw
# /lib/systemd/system/ufw.service
[Unit]
Description=Uncomplicated firewall
Documentation=man:ufw(8)
DefaultDependencies=no
Before=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/lib/ufw/ufw-init start quiet
ExecStop=/lib/ufw/ufw-init stop
[Install]
WantedBy=multi-user.target
$
Если вам действительно нужно, чтобы сеть работала, вы можете добавить к модульному файлу:
After=network-online.target
Wants=network-online.target
Вы также можете просмотреть журнал, чтобы узнать, не выдают ли службы какие-либо ошибки:
sudo journalctl -u ufw