Meu programa compilado está sendo executado via init.d mas acaba sendo morto

1

Eu fiz um pequeno aplicativo utilitário em C que monitora udev para eventos de energia e ajusta o brilho da luz de fundo do meu laptop automaticamente. (Estou executando o Ubuntu 15.04)

Eu executei os seguintes comandos e eles são executados na inicialização.

$ sudo cp powermonitor /etc/init.d/powermonitor
$ sudo chmod +x /etc/init.d/powermonitor
$ sudo update-rc.d powermonitor defaults

No entanto, depois de monitorar o uso da CPU em htop por um tempo, notei que ele desapareceu. O programa não usa argumentos de linha de comando, embora pareça que o Linux está tentando iniciá-lo com:

/etc/init.d/powermonitor start

Existe algo que eu deveria estar fazendo para garantir que o processo continue funcionando?

EDIT: Para esclarecer, powermonitor é um executável e não um script.

    
por armadadrive 09.09.2015 / 01:22

1 resposta

2

Os arquivos em /etc/init.d não devem ser executáveis compilados. Você coloca seu executável compilado em outro lugar, talvez /usr/local/bin ; então você escreve um script de inicialização em /etc/init.d , que sabe como iniciar e parar o programa compilado. Muitas vezes, isso é tão simples quanto executá-lo em segundo plano para iniciar e matar seu PID (ou seu nome executável usando killall ) para parar. init chamará o script de inicialização com um único argumento, a palavra start , stop , restart & c .; é responsabilidade do script saber como executar o serviço em si.

Para uma introdução rápida, experimente aqui . Pode haver um exemplo de script de esqueleto no diretório /etc/init.d que você pode alterar para se adequar ao seu caso.

Como uma nota lateral, que distro você está executando? Muitas distribuições modernas agora executam systemd em vez de sysvinit , que usa (por padrão) um arquivo de unidade declarativa em vez de um script de inicialização; Os arquivos da unidade IMO são mais fáceis de escrever. O systemd fornece um modo de compatibilidade sysvinit, portanto, é possível que você o rode. Nesse caso, recomendo escrever um arquivo de unidade em vez de um script.

    
por 09.09.2015 / 01:32