Raspberry

Como iniciar programa no boot do Raspberry Pi

Gerar binário a partir do script Python | resolvendo nomes | iniciar programa no boot | Multithread no Raspberry | Compilar programas escritos em Python

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”.

Serviços de sistema

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.

Como criar um serviço do systemd

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.

rf.service

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:

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).

Iniciar programa no boot

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:

Agora, podemos testá-lo antes de incluir no sistema:

Se a execução ocorrer sem problemas, podemos então instalar o serviço. Para ver status:

Se precisar modificar o script de serviço a qualquer momento, posteriormente deve-se recarregar o daemon de serviço:

Agora é hora de instalar o serviço:

Para parar e iniciar o serviço sem precisar reiniciar o Raspberry, use:

Feito!

Projetos para sua empresa

Do bit Ao Byte é 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!