Raspberry Pi iniciando programas automaticamente na inicialização

22

Eu construí uma rede de sensores sem fio que consiste em dois Raspberry Pi (Rasnberry Raspbian) com sensores e uma estação base Raspberry Pi que coleta os dados.

Cada vez que quero executar o sistema, preciso fazer login em cada unidade de sensor e executar dois programas Python em loop, um para coletar dados do sensor e outro para transmitir à estação base.

Essas unidades estão indo para locais difíceis, sem acesso à Internet, então levar um monitor, teclado e mouse comigo para fazê-las funcionar não é exatamente fácil. Existe alguma maneira de configurá-los para efetuar login automaticamente, executar o programa 1 e executar o programa 2 automaticamente na inicialização?

Kersakov
fonte

Respostas:

15

Você pode adicionar esses 2 programas ao arquivo rc.local. Isso os executará na inicialização. Mais informações podem ser encontradas em http://www.raspberrypi.org/documentation/linux/usage/rc-local.md .

Xer0FyT
fonte
3
Um ponto desse documento que parece enganar as pessoas: não use sudopor rc.localsi só. É executado com privilégios de root na inicialização. Certifique-se de prestar atenção à parte sobre o uso, a &menos que seu programa faça algo rapidamente e saia.
goldilocks
Se você deseja que seus programas sejam executados após o funcionamento da rede, e /path/to/somescript.sh &para rc.local, e no script, adicione while ! ping -c 1 -W 1 8.8.8.8; do sleep 1; done;antes de iniciar seus programas.
Tor Klingberg
+ goldilocks O problema é que você não pode obter acesso de gravação rc.localsem executar o sudo antes. O que você sugere?
Rincewind
15

A resposta do Xer0FyT é provavelmente a maneira mais simples de iniciar automaticamente um programa no PI. Mas os problemas ocorrem quando o programa iniciado falha por qualquer motivo, porque não será reiniciado, pois não há monitoramento de processo. Pessoalmente, eu recomendaria o uso de daemontools . É bem simples de configurar (e está incluído no Raspbian). Basicamente, você cria um diretório de serviço que contém um runscript de shell que inicia seu programa. O daemontools garantirá que seu programa seja iniciado e reiniciado, caso ocorra uma falha por qualquer motivo.

Configurar daemontools é bastante simples. Somente

apt-get install daemontools daemontools-run

Em seguida, crie seu diretório de serviço contendo um script de execução executável:

# create the service directory
mkdir -p /service/my-service

# create the run script
cat > /service/my-service/run <<EOF
#!/bin/sh
echo "I'm an example service executed by daemontools"
sleep 1
# Replace those 2 lines with a real call to your program like this:
# exec /my/program.py --arguments
EOF

# make it executable
chmod 755 /service/my-service/run

Dê uma olhada /service/my-service/rune edite-o, para que ele inicie seu próprio programa em vez de executar echo. Feito isso, faça o link simbólico desse diretório para /etc/serviceo daemontools automaticamente (re) o inicie:

cd /etc/service
ln -s /service/my-service .

Após cerca de 5 segundos, seu programa deve ser executado. Você pode iniciar / parar usando

# stop it
$ svc -d /service/my-service

# start it
$ svc -u /service/my-service

Também é possível fazer logon no (por exemplo) syslog. Portanto, a saída do seu programa não se perde. Eu escrevi um post de blog mais completo sobre isso aqui: https://info-beamer.com/blog/running-info-beamer-in-production

dividuum
fonte
9
  1. No Raspian, clique em Menu, Preferências, Editor do menu principal
  2. Clique em Preferências e marque Aplicativos padrão para LXSession
  3. Clique em OK e feche o editor do menu principal
  4. Agora clique em Menu e em Preferências, clique em Aplicativos padrão para LXSession
  5. A configuração do LXSession é aberta
  6. Clique em Iniciar automaticamente
  7. Em Aplicativos iniciados automaticamente manualmente, cole na sua linha de comando java
  8. clique em adicionar
  9. feche o aplicativo de configuração LXSession e reinicie seu pi

    seu aplicativo java deve ser executado após a reinicialização

Palmeta
fonte
Eu acho que apenas um pouco mais de detalhe é necessário aqui
Darth Vader
Funcionou bem para mim!
jbyrnes
Obrigado @Palmeta! Eu tinha um programa na inicialização automática, mas na verdade esqueci onde o havia definido. Eu olhei em todos os lugares. Com a ferramenta de configuração que você descreveu, finalmente consegui localizá-lo novamente e desativá-lo: D! 100 pontos
Pascal Lamers
2

Você provavelmente já croninstalou algumas das tarefas de limpeza do PI.

Pesquise man 5 crontabpor @reboot.


fonte
0

Você pode querer pesquisar service. Você pode criar um script init que faça parte do init do sistema e colocá-lo em um nível de execução apropriado.

Corra man service.

Aqui está um guia para a criação de scripts init: http://www.novell.com/coolsolutions/feature/15380.html

Bex
fonte
2
Infelizmente, com o lemming-like corrida em direção systemdda maioria das distribuições Linux, incluindo Raspbian, esta resposta terá atualização se o OP atualiza seu sistema para que assume a partir sysv init... 8- (
SlySven
0

Basta seguir este link .

Supondo que você tenha test.txt na área de trabalho, um exemplo pode ser:

sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
@leafpad /home/pi/Desktop/test.txt

e funciona!

Ehsan Ansari
fonte