Essa pergunta já foi feita algumas vezes antes, mas não consegui fazê-la funcionar usando as informações existentes.
Meu Pi roda Raspbian. Eu tenho um script Python chamado dnscheck.py que faz um loop para sempre.
Eu preciso que ele seja executado na inicialização. Eu sei que tenho que criar um arquivo .sh contendo algo como
sudo python dnscheck.py &
O que eu não sei é onde esse arquivo deve estar ou se deve conter mais alguma coisa. Eu sei sobre a pasta init.d, mas vendo o exemplo do esqueleto, imagino que deveria haver uma maneira mais simples de fazer essa tarefa simples.
Respostas:
Se você deseja controlar o processo com comandos como iniciar, parar, reiniciar, etc, usando o script do esqueleto e alterá-lo para seus propósitos pode ser a melhor opção.
Se você quer apenas o processo para começar, coloque o comando no
/etc/rc.local
. (Eu não tenho meu RPi em mãos, mas li on-line que há uma linha de 'saída 0', você deve colocar seu comando acima dessa linha)fonte
rc.local
root. Você também deve especificar o caminho completo para o script, obviamente. Você também deve adicionar&
no final para que o script bifurque, por exemplo/path/to/foobar.py &
.&
? Porque quando eu uso sem ele, tudo continua funcionando como esperado.Mova seu script (vamos salvá-lo no arquivo
dnscheck
) para/etc/init.d/
e defina as permissões para que ele possa ser executado:Adicione as tags de inicialização LSB na parte superior do seu script. Você provavelmente desejará alterar Início / Parar Necessário e as Tags de Descrição para se ajustarem ao seu script.
Em seguida, crie os links simbólicos executando
fonte
/etc/rc.local
for insuficiente.Existem muitas maneiras de fazer isso, é claro, mas não se esqueça de usar
cron
. Se você colocar uma@reboot
linha no seu crontab, esse comando será executado a cada reinicialização.Para testar, adicionei a seguinte linha ao meu usuário crontab com
crontab -e
:@reboot echo "$(date)" >> ~/boot.txt
O bônus desse método é que você pode chamar o trabalho conforme necessário em outros intervalos, além do tempo de inicialização, e não precisa editar scripts de inicialização.fonte
se você usar o arquivo rc.local, isso pode ser útil para solucionar problemas. Você pode adicionar linhas de log para registrar erros (stderr) e comandar a saída (stdout) no arquivo de log. De acordo com este exemplo, esse arquivo é salvo em /tmp/rc.local.log
Ler mais
fonte
Estou realmente surpreso que os daemontools do djb não sejam mencionados aqui. O Daemontools supervisiona adequadamente o processo e você pode adicionar recursos interessantes, como o log girado automaticamente. TL; DR, se você não estiver familiarizado com nada disso, seu processo será reiniciado toda vez que falhar e será iniciado automaticamente quando o Pi for ativado. Isso é ótimo se você escreveu um programa python ruim com modos de falha, mas não quer que ele morra se um erro for encontrado.
Instalar:
Em seguida, siga as etapas para criar processos daemonized:
É tão simples quanto copiar um
run
script para/etc/service/<my_custom_service_name>
Outra vantagem: você pode executar como qualquer usuário ou root! Detalhes no link.FWIW Eu tinha um projeto Pi em que tinha 3 processos python diferentes (cada um tinha um loop de execução usando o tempo da CPU, portanto, usando 3 processos, permiti que cada processo aproveitasse 1 núcleo da CPU). O Daemontools me permitiu garantir que todos os três fossem executados automaticamente e continuariam sendo executados após eu conectar o Pi.
fonte
Aqui está a solução que eu uso constantemente.
Crie um arquivo da área de trabalho
digite o seguinte nele
cole esse arquivo no
e reinicie o seu raspberry pi e ele deve executar automaticamente o seu programa em um novo terminal
fonte
Para usar um arquivo .py, basta colocar a linha
#!/usr/bin/python
no início do seu arquivo. Em seguida, torne-o executável comchmod +x filename
. Em seguida, adicione a linha/path/to/file.py &
de/etc/rc.local
antes daexit 0
linha (troca/path/to/file.py
com o caminho para o script). Isso fará com que seu script python seja executado no final da inicialização.fonte
Aqui está um método ainda mais fácil que funcionou para mim. Modifique a inicialização automática no LXDE.
Abra um terminal e edite o arquivo de inicialização automática da seguinte maneira:
adicione a seguinte linha de texto na parte inferior (modifique o caminho conforme necessário para onde o seu example.py está localizado)
ctr-x e salve. Pode ser necessário tornar o script python executável da seguinte maneira:
referência para inicialização automática no LXDE e referência para tornar o python executável
fonte
essas soluções não funcionaram para mim, tentando iniciar um script python com o Feh. O seguinte funcionou. Inicia um script após o login.
Abra uma sessão do terminal e edite o arquivo
sudo nano /etc/profile
Adicione a seguinte linha ao final do arquivo
/home/pi/your_script_name.sh
substitua o nome e o caminho do script pelo nome e caminho corretos do script de inicialização. Salvar e sair
Pressione Ctrl + X para sair do nano editor seguido de Y para salvar o arquivo.
Aqui está a aparência do meu script.sh:
Acho que criei o script.sh e o script.py executáveis usando o chmod
fonte