Execute qualquer executável como um serviço no Linux

Executar qualquer executável como um serviço Linux

Conteúdo da página

Aqui está um conjunto de instruções sobre Como Configurar para Executar Qualquer Executável como Serviço no Linux com o Systemd.

Este guia faz parte de Ferramentas de Desenvolvedor: O Guia Completo para Fluxos de Trabalho Modernos de Desenvolvimento

linux cogs Acima está uma imagem gerada por IA (pelo modelo Flux 1 dev) das engrenagens representando a abordagem DIY do Linux.

Systemd

O Systemd é um gerenciador de sistema e serviços e uma ferramenta de inicialização em algumas distribuições Linux.

Algumas das distribuições populares com systemd:

  • Ubuntu 16.04 ou mais recente
  • Debian Jesse ou mais recente
  • Arch Linux
  • CentOS 7 / RHEL 7 ou mais recente
  • Fedora 15 ou mais recente

systemctl

systemctl é uma ferramenta de linha de comando para controlar o systemd.

Listar todos os serviços

Para listar todos os serviços, execute:

systemctl list-units --type=service

Criar um arquivo de serviço

Navegue até o diretório de serviços do systemd e crie um novo arquivo com a extensão .service:

sudo nano /etc/systemd/system/nome_do_seu_servico.service

Configure o arquivo de serviço:

Adicione o seguinte conteúdo ao arquivo, ajustando os valores conforme necessário:

[Unit]
Description=Descrição do Seu Serviço
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/caminho/para/seu/diretorio/executavel
ExecStart=/caminho/para/seu/executavel
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Salve e feche o arquivo.

Início de serviço com atraso

Se suspeitar de problemas de temporização durante a inicialização do serviço, considere adicionar um atraso à configuração do seu serviço:

[Service]
ExecStartPre=/bin/sleep 10

Dependências de serviço

Para configurar as dependências do seu serviço: na seção [Unit] do arquivo de configuração do serviço,

adicione as seguintes diretivas:

Use After= para especificar serviços que devem ser iniciados antes do seu serviço:

After=network.target outro_servico.service

Use Requires= para definir dependências rígidas:

Requires=servico_requerido.service

Use Wants= para dependências suaves:

Wants=servico_opcional.service

Recarregar o systemd para reconhecer o novo serviço

sudo systemctl daemon-reload

Verificar dependências do serviço

sudo systemctl list-dependencies nome_do_seu_servico.service

Habilitar o serviço para iniciar na inicialização

sudo systemctl enable nome_do_seu_servico.service

Para verificar se o seu serviço está configurado para iniciar na inicialização:

sudo systemctl is-enabled nome_do_seu_servico.service

Iniciar o serviço

sudo systemctl start nome_do_seu_servico.service
# ou
sudo systemctl restart nome_do_seu_servico.service

Verificar o status do serviço

Se algo deu errado - verifique os logs e status do serviço Linux:

sudo systemctl status nome_do_seu_servico.service

ou

sudo journalctl -u nome_do_seu_servico.service

Para Scripts Python

ExecStart=/caminho/para/conda/envs/nome_do_meu_env/bin/python /caminho/para/executavel.py

Comentários

Agora você pode gerenciar seu serviço usando comandos systemctl, como start, stop, restart e status.

Para executáveis que requerem parâmetros, modifique a linha ExecStart no arquivo de serviço conforme necessário.

Por exemplo, se você precisar executar uma aplicação Java, use o comando Java completo na linha ExecStart.

Lembre-se de ajustar as permissões de arquivo e propriedade conforme necessário, e certifique-se de que o executável tenha as permissões de execução corretas.

Controle de serviços Systemd com chkservice

Em vez de executar

sudo systemctl start some-serviceservice
# ou
sudo systemctl restart some-serviceservice

Você pode usar uma ferramenta de interface de console. Fácil e leve.

sudo apt-get install chkservice

sudo chkservice