inicializa o aplicativo na inicialização no ambiente raiz, monitora e se fechar ou travar o relançamento

0

Eu tenho uma pergunta sobre como posso iniciar um aplicativo, escrito em python, assim que a inicialização foi concluída. Esse aplicativo precisa ser executado com permissões completas, para que as senhas não sejam necessárias, pois há dois comandos que são executados com o sudo.

Eu também preciso para relançar o aplicativo com as mesmas permissões se o aplicativo for desligado.

Eu fiz coisas parecidas, mas nunca todas juntas. Por exemplo, para iniciar na inicialização. Eu lançaria um pequeno script que chama o aplicativo que quero em outro diretório, no diretório init.d. Então, fazendo "update-rc.d app defaults", ele será iniciado automaticamente como parte dos scripts de inicialização do Ubuntu

para relançar um programa se ele travar outro script simples

#!/usr/bin/python
from subprocess import Popen
import sys

filename = sys.argv[1]
while True:
    print("\nStarting " + filename)
    p = Popen("python " + filename, shell=True)
    p.wait()

faz o trabalho. Eu posso inserir o nome do aplicativo no nome do arquivo para que eu não precise fornecê-lo como parte dos argumentos quando eu chamá-lo.

meu principal problema é que o aplicativo que estou executando precisa ser executado no ambiente raiz, o autolaunch no boot e o relançamento do seu encerramento.

Alguma sugestão?

    
por Michael 21.09.2018 / 14:08

1 resposta

0

Então, depois de receber uma sugestão de Glenn Jackman, comecei a passar mais algum tempo olhando para o upstart / systemd. Eu acabei olhando para o systemd e descobrindo uma série de aspectos do que eu estava procurando.

uma das preocupações era que até agora eu precisava executar o software em um ambiente raiz, já que alguns dos softwares de fornecedores que eu usava exigiam isso. Parece que quando você configura um serviço com o systemd, tudo é executado com privilégios de root. Então, isso resolveu um dos meus problemas.

No que diz respeito ao lançamento durante a inicialização e o gerenciamento de qualquer desligamento do software, ele foi tratado com um arquivo de unidade muito simples, localizado em /lib/systemd/system/app.service

[Unit]
Description=this does something
WantedBy=multi-user.target

[Service]
exec executes my app
Restart
RestartSec

[Install]
wantedBy=multi-user.target

Em seguida, ativei o novo serviço através do uso de systemctl

sudo systemctl enable app.service
sudo systemctl daemon.reload
sudo systemctl start app.service

isso ativou o lançamento na inicialização e testou agora.

Mais uma vez obrigado a Glenn por me apontar na direção certa.

    
por 21.09.2018 / 23:30