Criando um service no systemd

terça-feira, 27 de fevereiro de 2018

Criando um service no systemd


Olá Jovens Mancebos !

Estava eu em meu trabalho necessitando um bom/simples tutorialzinho de como configurar um shell script para rodar como um serviço (sem o start/stop) apenas para subir automaticamente o keycloak junto com o s.o. quando pensei em vocês !
Resolvi então trazer aqui no blog um how-to muito básico de como fazer um setup de um shell script no systemd.



O systemd é usado em muitas distribuições mainstream Linux como Arch Linux, CentOS, Debian / Ubuntu, RedHat / Fedora, OpenSuse, Slackware, CoreOS e muito mais. Ele fornece uma maneira fácil de gerenciar e controlar serviços e um método simples (não tão simples quanto o initd, mas mais moderno) de criar seus próprios serviços.

Vamos entender um pouco:

  • Arquivo .service - é o arquivo que iremos criar apontando para um shell script dentro da estrutura do systemd. Pode ser comparado aos daemons do initd (ainda são daemons)
  • /etc/systemd/system - é o diretório onde estão localizados os targets do systemd e onde são registrados os serviços que irão inicializar com cada target. Poderia ser comparado com o antigo /etc/init.d/, é onde é registrado o arquivo .service criado com systemctl enable ou chkconfig
  • Targets - são os modos de boot do s.o./systemd como os runlevels do antigo initd, ex. multi-user.target seria o target responsável pelo "boot" em modo multi-usuário, comparado ao runlevel 3 ou 5.
Nota: É possível criar o arquivo .service dentro de /usr/lib/systemd/system/ também, porém é indicado reservar este diretório para os pacotes de sistema somente. Tudo o que estiver em /etc/systemd/system/ irá sobrescrever o que está no caminho /usr/lib/systemd/.

O arquivo .service 

Então vamos lá, crie um arquivo .service dentro do diretório /etc/systemd/system/ - O meu será keycloak.service

[Unit]
Description=Meu Serviço Keycloak
After=network.target
[Service]
Type=simple
User=userxpto
WorkingDirectory=/home/xpto
ExecStart=/home/xpto/keycloak/standalone.sh --option=123
Restart=on-abort
[Install]
WantedBy=multi-user.target

Dentro da sintaxe do arquivo .service existem inúmeros outros parâmetros que você pode utilizar para melhorar seu serviço. Dentre eles, ExecStart, ExecStop e ExecReload por exemplo.
Para maiores informações sobre os parâmetros do arquivo, veja o manual do systemctl:
# Leia todas as opções de serviços
man systemd.service

Controlando um serviço com systemctl:

# Controla se o serviço iniciará no boot (chkconfig  on)
systemctl enable
systemctl disable

# Inicia ou para um serviço manualmente
systemctl start
systemctl stop

# Restarting/reloading
systemctl daemon-reload # Execute caso o arquivo .service foi alterado
systemctl restart
systemctl reload

Troubleshooting e Logs

# Verifica alguns dados do serviço, últimos logs, uptime
systemctl status

# Verifica todos os logs do systemd
journalctl

# Tail logs
journalctl -f

# Mostra os logs de um serviço específico
journalctl -u keycloak.service










Um comentário :

  1. ola estou seguindo seu tutorial, muito bom, mas quando rodo o systemctl start arquivo.service ele mostra que o serviço foi iniciado, mas não inicia, recomenda mais alguma coisa a ser feito.

    ResponderExcluir