Quais são as maneiras de criar um daemon usando o systemd? [fechadas]

0

Não sei qual é a metodologia geral de daemonizing de um script. Por exemplo, eu pesquisei on-line e se eu estava tentando escrever um script python que verificava a hora a cada segundo no meu computador, tudo que eu conseguia pensar era usar o systemd para iniciá-lo e, em Python, escrever o script dentro de um nunca loop final com um temporizador.

Isso não faz muito sentido para mim nem parece uma boa maneira de daemonizar. Tudo o que eu faria com o systemd é usá-lo para executar o script (e qualquer script) na inicialização, de modo que o próprio systemd não parece muito útil. Eu acho que posso estar daemonizando meu script errado, então você sabe quais são as melhores maneiras de usar o systemd para transformar um script python em um processo daemon?

Obrigado

    
por Goldname 10.07.2017 / 15:52

2 respostas

2

systemd não é um pega-tudo. Não será a solução para o problema every , mas oferece muitas ferramentas para ajudá-lo a resolver problemas. A utilidade dessas ferramentas se resume a quão bem você pode usá-las.

Vejamos um arquivo de serviço muito básico check-time.service (note que criei este arquivo de serviço manualmente, usando outros arquivos de serviço localizados em /usr/lib/systemd/system/ como referências):

[Unit]
Description=Checks the time every second

[Service]
Type=simple
ExecStart=/usr/bin/check-time.py

O arquivo de serviço pertence em /usr/lib/systemd/system/ ou /etc/systemd/system/ a ser usado por systemd

Linha por linha

[*] Os cabeçalhos da seção. Estas apenas agrupam diretivas. Você pode encontrar referências às quais as diretivas pertencem onde estão as páginas systemd man:

seção [Unidade]

[Serviço] seção

seção [Instalar]

Descrição

A free-form string describing the unit. This is intended for use in UIs to show descriptive information along with the unit name. The description should contain a name that means something to the end user. "Apache2 Web Server" is a good example. Bad examples are "high-performance light-weight HTTP server" (too generic) or "Apache2" (too specific and meaningless for people who do not know Apache).

tipo

Configures the process start-up type for this service unit. One of simple, forking, oneshot, dbus, notify or idle.

If set to simple (the default if neither Type= nor BusName=, but ExecStart= are specified), it is expected that the process configured with ExecStart= is the main process of the service. In this mode, if the process offers functionality to other processes on the system, its communication channels should be installed before the daemon is started up (e.g. sockets set up by systemd, via socket activation), as systemd will immediately proceed starting follow-up units.

ExecStart

Commands with their arguments that are executed when this service is started. The value is split into zero or more command lines according to the rules described below (see section "Command Lines" below).

Resumo

Este arquivo de serviço simplesmente executaria o comando /usr/bin/check-time.py quando iniciado. Se o comando sair, ele será considerado "morto", desde que continue a ser executado, é considerado "Ativo".

Qual a utilidade desse arquivo de serviço? Bem, não muito. Como é a única coisa que faz é permitir que você execute o script python usando systemctl start check-time.service em vez do caminho completo normal, no entanto, há uma variedade de opções adicionais que podem ser úteis.

Opções úteis

WantedBy Se você deseja que o serviço seja iniciado na inicialização, defina WantedBy= do seu alvo padrão.

Restart Determina quando systemd deve reiniciar automaticamente um serviço, como "sempre" ou "em falha"

Literalmente centenas de outras opções que incluem limitar o uso de hardware, qual usuário usar para executar o processo, definir variáveis de ambiente, definir dependências e muito mais. systemd é útil para todas as funcionalidades adicionais que fornece, não simplesmente porque pode envolver coisas.

    
por 10.07.2017 / 17:11
0

Não tenho certeza do que você está perguntando. O Systemd é um sistema init, então o trabalho é executar processos na inicialização.

Editar: Para listar serviços na execução do sistema:

systemctl list-units --type service
    
por 10.07.2017 / 15:59