Em um servidor Ubuntu 20.04.2 TLS, preciso iniciar um serviço depois que outro for totalmente inicializado. Especificamente, o openvpn-server
serviço cria uma tun0
interface com o endereço IP 10.87.0.1 ao qual o rinetd
serviço se vincula. Portanto, o rinetd
serviço só deve ser iniciado após o openvpn-server
serviço ter criado essa interface.
rinetd
vem com um script de serviço sysvinit /etc/init.d/rinetd
dizendo:
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
Isso faz rinetd
com que seja iniciado durante a inicialização do sistema antes openvpn-server
de ter criado a interface. Em seguida, ele emite a mensagem de log:
rinetd[792]: couldn't bind to address 10.87.0.1 port 873 (Cannot assign requested address)
e não aceita conexões até que eu o reinicie manualmente com sudo systemctl restart rinetd
, após o que ele funciona bem.
De acordo com sudo systemctl status
o openvpn
processo do servidor é executado por um serviço systemd chamado [email protected]
. Estendendo a Required-Start
linha /etc/init.d/rinetd
para dizer:
# Required-Start: $remote_fs $syslog openvpn-server@server
é devidamente traduzido por systemd-sysv-generator
para uma linha adicional
[email protected]
em /run/systemd/generator.late/rinetd.service
. Mas o systemd ignora isso. rinetd
ainda mostra a mesma mensagem de log e mau funcionamento, provando que ainda é iniciado antes openvpn-server
de ser ativado.
Como posso obter o systemd para iniciar o rinetd
serviço de forma confiável somente após o openvpn-server
serviço ter feito sua parte e criado a interface?