Serviço, Daemon, Inicialização… Qual é o caminho certo?

-1

Eu acho que estou tendo um problema de terminologia parcial, parte simplesmente um problema newb, parte cansada de ler um problema.

Eu cheguei tão longe no meu projeto de monitor de energia em casa, de ter meu rádio SDR funcionando, decodificando os dados, empurrando o json para o InfluxDB, rodando o Grafana e obtendo gráficos! Tudo através de googling como eu tenho menos de 2 meses de experiência no Linux (apenas brincando com Raspberry Pi / OrangePi.

Meu OrangePi executa o Armbian Ubuntu 16.04

Eu preciso de um "comando" muito simples para executar na inicialização. Ele estará correndo o tempo todo em segundo plano. Então eu acho que isso torna um daemon? O comando é

/home/jonboy545/GoCode/bin/rtlamr -filterid=62059972 -format=json -msgtype=idm unique=true | rtlamr-collect

É isso. Eu fiz um script simples chamado log_energy.sh, tornei-o executável. É só:

#!/bin/bashr
/home/jonboy545/GoCode/bin/rtlamr -filterid=62059972 -format=json -msgtype=idm unique=true | rtlamr-collect;

Se eu digitar ./log_energy.sh em uma janela de terminal, tudo funcionará muito bem. Eu tenho que abrir uma instância do SCREEN, então eu posso separá-lo para que eu não tenha que deixar o terminal aberto. Obviamente, esta não é a melhor solução.

Então, coloco isso em rc.local? Eu tive alguns problemas, acho que está sendo executado muito cedo, então eu tentei colocar um sono 60 lá, mas ainda era esporádico. Às vezes funcionava, outras vezes não. Então eu pensei em usar o crontab e apenas executar o @reboot. Mais uma vez, provavelmente não é a melhor solução. Também existem variáveis de ambiente que devem ser declaradas e são configuradas em ~ / .profile (eu acho que elas poderiam ir a qualquer lugar) e não tenho certeza se crontab "lê" essas variáveis de ambiente, pelo menos é o que eu li. p>

Então, qual é a maneira "correta" de executar esse script na inicialização (talvez no final, quando tudo estiver "estabelecido"?

Em última análise, eu gostaria de tê-lo como um "serviço" chamado "energylog" para que eu pudesse fazer um sudo serviço energylog start / stop / restart.

Eu olhei para /etc/init.d/skeleton, assim como alguns arquivos já existentes em /etc/init.d, mas não tenho certeza do que estou vendo.

Alguém pode me orientar na direção certa?

Muito obrigado!

    
por poor_red_neck 25.03.2018 / 06:52

1 resposta

3

Acho que parte do problema é que existem / algumas maneiras de executar um aplicativo na inicialização.

Um daemon é algo como os antigos TSRs do DOS - é um aplicativo que é iniciado e executado em segundo plano.

As maneiras "clássicas" de fazer isso com um script init (que tendem a ser um pouco complicadas de escrever) - mas estas foram um pouco obsoletas, ou crontab - que literalmente apenas uma coisa projetada para executar tarefas específicas de cada vez .

O comando service refere-se ao upstart, que lida com o que os scripts init fizeram, mas com o 16.04, é substituído pelo systemd. É usado para systemd para pessoas em transição de upstart mas vale a pena substituir "service" com "systemctl" - que faz a mesma coisa e muito mais.

Escreva seu script para o systemd.

Por quê? É suportado e será para o longo prazo. Tem uma sintaxe bastante sensata. A documentação também é bastante decente.

Also there are environment variables that must be declared and are set in ~/.profile (I guess they could go anywhere) and I'm not sure that crontab "reads" those environment variables, atleast that's what I've read.

De acordo com os documentos do systemd (e para ler mais - esta questão AU , e o Ubuntu documentação )

Você pode adicionar uma linha com as variáveis ambientais com uma linha como

Ambiente="ONE = um" 'DOIS = dois dois'

Você também pode iniciá-lo como um usuário específico ou em um horário específico. Você pode até mesmo trivialmente reiniciá-lo automaticamente

    
por 25.03.2018 / 07:40