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
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