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

Как можно увеличить задержку между двумя взаимозависимыми службами выскочки или /etc/init.d?

Мой PostgreSQL служба должна начаться после OpenVPN, и когда я проверяю порядок каталогов rc.X, они отображаются как S16openvpn и S19postgresql, поэтому они находятся в правильном порядке.

Однако подключение к базе данных через VPN не удается, и журналы всегда указывают, что PostgreSQL не мог привязать при запуске. Я предполагаю, что для запуска всех сервисов OpenVPN и PostgreSQL запускается перед загрузкой OpenVPN сети полно.

Есть ли способ для PostgreSQL попытаться перезагрузить и попытаться привязаться к OpenVPN сеть, прежде чем сдаться?

Мне кажется, вы пытаетесь привязать postgres к IP-адресу, связанному с туннелем. Если это так, ip_nonlocal_bind это решение ваших проблем. Установка ip_nonlocal_bind позволяет вам выполнять привязку к любому IP-адресу, даже к тому, который не связан с вашим компьютером, что именно то, что вам нужно, когда вы хотите привязаться к IP-адресу, которого у вас еще нет - например, при использовании виртуальных IP-адресов, которые перемещаются между активными и пассивные узлы.

Предполагая, что это только ipv4;

echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind

Или бросить в /etc/sysctl.conf

net.ipv4.ip_nonlocal_bind

Это мой обходной путь, который я использовал много времени в этих ситуациях: отредактируйте стартовый скрипт postresql rc.d и добавьте задержку с sleep команда bash. Я знаю, что это не так чисто, возможно, у кого-то есть лучшее решение.

Отбросьте 2 отдельных сценария запуска и просто создайте тот, который вызывает их оба в правильной последовательности, с любой зависимой логикой, которая вам нравится.