Execute qualquer executável como um serviço no Linux
Executar qualquer executável como um serviço Linux
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
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
Links úteis
- Reinstalar Linux
- Folha de Dicas Bash
- Folha de Dicas Kubernetes
- Folha de Dicas Docker
- Redimensionar imagens com ImageMagick
- Decodificar e imprimir token JWT
- Como iniciar janelas de terminal organizadas no Linux Mint Ubuntu
- Melhores Emuladores de Terminal Linux: Comparação 2026
- Ubuntu perdeu a rede após atualização do kernel