Manual
do
Maker
.
com
Já escrevi um artigo sobre criação de serviço no Raspberry. Dessa vez, em uma breve dica, veremos como iniciar programa no boot do Raspberry no formato "one shot".
O Linux inicializa o sistema executando uma série de serviços. Existe uma ordem pré-definida para isso, de modo que um serviço como um broker MQTT suba somente após o serviço network ser inicializado.
Atualmente o Linux usa o systemd, que permite uma personalização bastante elaborada do modo de inicialização e veremos apenas alguns dos diversos parâmetros possíveis de serem utilizados.
Se pretende rodar um programa que fique sob a supervisão do sistema, o primeiro artigo citado é o que está procurando. Nesse artigo veremos como rodar um serviço tratado como "one shot". Isto é, ele não fica monitorando para saber se o processo caiu e reiniciá-lo, ele simplesmente dispara o programa solicitado, que pode (ou não) permanecer em execução no sistema. Um exemplo seria alguma configuração básica do startup, no estilo do rc.local.
O primeiro passo é criar o arquivo com o nome do serviço. Supondo que queiramos iniciar um programa que fizemos para por exemplo, iniciar uma comunicação por RF. Vamos usar um nome fictício, como rf_init. Podemos chamá-lo a partir de qualquer diretório, mas se você gosta de organização, seguindo o padrão POSIX certamente o colocaria em /opt/RF_init. Agora precisamos criar o script de inicialização de serviço.
Podemos criar com o nome que desejar, sufixado com .service. No caso, chamaremos o script de inicialização de serviço de rf.service.
Seu conteúdo deve ser algo como:
[Unit]
Description=NRF24L01 service preloader
After=network.target
[Service]
Type=oneshot
ExecStart=/opt/RF_init/rf_init
RemainAfterExit=true
StandardOutput=journal
User=root
[Install]
WantedBy=multi-user.target
Em [Unit] temos os parâmetros de descrição do serviço, seguido pelo parâmetro do momento em que o script deve subir.
Em [Service] temos o parâmetro Type, que informa ser um script single shot, executa uma vez e provavelmente deverá finalizar após sua execução.
A linha ExecStart indica o caminho para o binário ou script, seguido por RemainAfterExit, que indica se o serviço deve continuar em execução após iniciado. Isso permite consultar o status da execução, bastante recomendado, mas poderia simplesmente executar e sair.
Em StandardOutput podemos ter diversos tipos de parâmetros, como apontar para o dispositivo /dev/null caso nenhuma informação seja importante, ou inherit para duplicar o input para o output, jogar para a tty, para o syslog etc. No caso estamos utilizando a opção journal, que conecta a saída padrão ao journal (acessível via journalctl. Se utilizar a opção syslog ou kmsg, automaticamente a saída irá para o journalctl também, portanto apenas uma delas é o suficiente. Também podemos combinar as saídas, por exemplo, journal+console para termos um feedback visual.
Para ver todas as opções dos parâmetros do systemd, recomendo essa leitura (em inglês).
Para iniciar no boot, agora temos que copiar para o diretório do systemd e incluí-lo ao sistema. Primeiro, faça a cópia do seu arquivo de serviço para o respectivo destino:
sudo cp rf.service /etc/systemd/system/
Agora, podemos testá-lo antes de incluir no sistema:
sudo systemctl start rf
Se a execução ocorrer sem problemas, podemos então instalar o serviço. Para ver status:
sudo service rf status
Se precisar modificar o script de serviço a qualquer momento, posteriormente deve-se recarregar o daemon de serviço:
sudo systemctl daemon-reload
Agora é hora de instalar o serviço:
sudo systemctl enable rf.service
Para parar e iniciar o serviço sem precisar reiniciar o Raspberry, use:
sudo service rf start
sudo service rf stop
Feito!
Manual do Maker é mais do que um blog. Somos uma empresa de serviços, cuja principal atividade é desenvolvimento e implementação de projetos embarcados e IoT. Trabalhamos dentro da legalidade, emitindo nota fiscal de serviço, elaboração de requisitos de sistema e documentação do código. Não importa onde você esteja, montamos a prova de conceito e gravamos vídeo do projeto antes de entregar o código e/ou hardware configurado.
Em parceria com a AFEletrônica, projetamos e produzimos hardware industrial (também com nota), para lhe entregar a melhor experiência para seu projeto.
Se precisar de treinamento para sua equipe, palestra, projetos com requisitos, perícia forense digital, consultoria, auditoria, software ou hardware, somos quem você procura! Entre em contato: vendas@afeletronica.com.br Ou direto comigo: djames.suhanko@gmail.com
Será um prazer tê-lo como nosso cliente!
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.