Execute qualquer Executável como um Serviço no Linux
Executar qualquer executável como um serviço do Linux
Aqui está um conjunto de instruções sobre Como Configurar para Executar qualquer Executável como um Serviço no Linux com Systemd.
Acima está uma imagem gerada por IA (pelo modelo Flux 1 dev) dos engrenagens que representam a abordagem DIY do Linux.
Systemd
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 Jessie 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ço do systemd e crie um novo arquivo com a extensão .service:
sudo nano /etc/systemd/system/your_service_name.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/diretório/executável
ExecStart=/caminho/para/seu/executável
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Salve e feche o arquivo.
Início atrasado do serviço
Se você suspeitar de um problema de timing durante o início do serviço, considere adicionar um atraso à sua configuração de serviço:
[Service]
ExecStartPre=/bin/sleep 10
Dependências do serviço
Para configurar 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 iniciar antes do seu serviço:
After=network.target outro_serviço.service
Use Requires= para definir dependências duras:
Requires=serviço_necessário.service
Use Wants= para dependências suaves:
Wants=serviço_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 your_service_name.service
Habilitar o serviço para iniciar no boot
sudo systemctl enable your_service_name.service
Para verificar se seu serviço está configurado para iniciar no boot:
sudo systemctl is-enabled your_service_name.service
Iniciar o serviço
sudo systemctl start your_service_name.service
# ou
sudo systemctl restart your_service_name.service
Verificar o status do serviço
Se algo deu errado – verifique os logs e o status do serviço do Linux:
sudo systemctl status your_service_name.service
ou
sudo journalctl -u your_service_name.service
Para scripts Python
ExecStart=/caminho/para/conda/envs/my_env_name/bin/python /caminho/para/executável.py
Comentários
Agora você pode gerenciar seu serviço usando comandos do 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 completo de Java na linha ExecStart
.
Lembre-se de ajustar permissões de arquivo e propriedades conforme necessário, e certifique-se de que o executável tenha as permissões corretas para execução.
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