Se você estiver usando o NetworkManager, para que network-online.target
funcione como esperado, é necessário ativar o serviço NetworkManager-wait-online.service
, que é o que na verdade espera que a rede seja online para satisy esse alvo.
O network-online.target
precisa ser "conectado" ao seu gerenciador de rede (como o NetworkManager não é a única alternativa, há também o systemd-networkd que pode ser usado para gerenciar a rede.)
Para que network-online.target
trabalhe com o NetworkManager, você precisa ter um link simbólico em /etc/systemd/system/network-online.target.wants/
apontando para /usr/lib/systemd/system/NetworkManager-wait-online.service
.
O que você pode realmente criar ativando esse serviço:
$ sudo systemctl enable NetworkManager-wait-online.service
Created symlink from /etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service to /usr/lib/systemd/system/NetworkManager-wait-online.service.
Uma vez que isso esteja em vigor, as dependências de network-online.target
devem começar a funcionar, esperando até que o NetworkManager termine a criação de todas as interfaces que devem ser exibidas na inicialização.
Para ajudar a diagnosticar problemas com essa configuração, convém ver também a saída de systemctl status network-online.target
e systemctl status NetworkManager-wait-online.service
, pois eles podem ter mais pistas sobre o que está acontecendo. (Em particular, os timestamps podem ser úteis, se os daemons que dependem de network-online.target
estiverem iniciando antes de NetworkManager-wait-online.service
ter terminado, então você pode ter um problema com sua configuração.)
Das soluções listadas, eu recomendaria essa:
# mkdir /etc/systemd/system/sshd.service.d
# tee /etc/systemd/system/sshd.service.d/wait.conf << 'EOF'
[Unit]
Wants=network-online.target
After=network-online.target
EOF
Como network-online.target
é o que você realmente quer (para garantir que todos os IPs estejam ativos, etc.) e incluir Wants=
garante que sua inicialização seja solicitada.
Dos outros métodos, este não funcionará: systemctl add-wants multi-user.target network.target
, já que não está criando nenhuma dependência entre os serviços em si (daemon SSH, etc.) e a rede está totalmente ativa. É só dizer que você quer que a rede esteja ativa ...
E o que envolve o diretório /etc/systemd/system/sshd.service.requires/
está sem a dependência After=
(que eu acredito ser essencial, e não implícito por ter apenas um .requires/
.) Se você acha que Requires=
é melhor que Wants=
(é mais strong, faz com que a unidade falhe se a dependência falhar), então eu recomendo usar isso apenas em /etc/systemd/system/sshd.service.d/wait.conf
, o arquivo de substituição é definitivamente uma maneira mais flexível de gerenciar essa configuração.
A adição de uma dependência em sys-subsystem-net-devices-eth1.device
também não ajuda, já que isso indica apenas que o dispositivo existe (do ponto de vista do udev), o que não diz nada sobre ele estar configurado e configurado ainda. Então isso não é uma opção.