Fundo
Estou escrevendo um script simples para ser executado no Raspbain no Raspberry Pi 2, basta acender um LED para indicar que estou pronto para conectar-me ao SSH do meu computador desktop.
O script não é importante aqui, apenas para mencionar que como eu uso controle de frequência então o script fica rodando um loop infinito, para ligar e desligar o LED com frequência. Portanto, este é um exemplo de serviço simples. No entanto, pelo menosa resposta aceita desta perguntaaconselhe-me a definir o tipo como inativo. Então meu arquivo de serviço se parece
[Unit]
Description=Turn on LED after SSH is ready
[Service]
Type=idle
ExecStart=/usr/bin/sshready.py
[Install]
Wants=network-online.target
After=network-online.target
Efeito
O serviço funciona conforme o esperado. No entanto, notei que quando inicio o PuTTY no meu computador desktop logo após o LED acender, o prompt de login não aparece imediatamente. Então eu verifiquei com
$ systemd-analyze plot > output.svg
O resultado mostra
Pergunta
Parece que meus serviços não iniciam depois network-online.target
, o que há de errado aqui e como posso consertar?
Responder1
Quando houver uma dúvida sobre uma diretiva systemd, você pode usá-la man systemd.directives
para descobrir onde ela está documentada. Neste caso mostra que After=
está documentado em man systemd.unit
.
Nesse arquivo, mostra que a After=
diretiva está listada em "[UNIT] SECTION OPTIONS", indicando que ela pertence à [Unit]
seção do arquivo.
A mesma documentação também documenta as opções da seção [INSTALL] e After=
não está listada lá.
Resumindo, sua After=
diretiva estava no local errado do arquivo da unidade, portanto não teve efeito até que você a movesse para o local correto.
Responder2
Conserte-o modificando o serviço como
[Unit]
Description=Turn on LED after SSH is ready
After=network-online.target
[Service]
Type=idle
ExecStart=/usr/bin/sshready.py
[Install]
WantedBy=network-online.target
Ainda não entendi completamente o que estava fazendo, mas funciona agora. Alguém pode explicar?
Atualizar
Esta resposta foi criada por mim mesmo antes de chegar a resposta aceita.