Systemd, como iniciar uma aplicação terceira? [RESOLVIDO]

1. Systemd, como iniciar uma aplicação terceira? [RESOLVIDO]

Mário Henrique da Silva Truber
mariotruber

(usa Outra)

Enviado em 20/07/2018 - 18:03h

Olá, Sou Mário Truber e estou com dificuldades para configurar uma aplicação como service no systemd.

O ambiente é o seguinte:
Estou utilizando o Ubuntu 18.04 e tenho uma aplicação em java que executa um licenciamento de um banco de dados. Preciso que essa aplicação que faz o licenciamento suba junto com o S.O, eu consigo fazer isso facilmente criando um "rc.local" no "/etc", porém quando faço isso e reinicio o S.O, simplesmente trava a reinicialização, na verdade o sistema não consegue encerrar a aplicação e por isso não desliga/reinicia.
Quando eu não configuro a aplicação de licenciamento no "rc.local" e subo ela na "mão" (executando direto o /licenciador.sh) o S.O reinicia/desliga normalmente.

Resumindo a obra, quero automatizar a inicialização da aplicação, mas não posso utilizar o método "rc.local" devida a falha que apresenta na hora de reiniciar o S.O.


As configurações que tentei para iniciar via systemd:


criei no "/etc/systemd/system" o objeto "licenciador.service" e dentro dele coloquei os seguintes parâmetros:
[Unit]
Description=licenciador service
After=network.service

[Service]
Type=simple
ExecStart=/licenciador/jre/bin/java -Xmx256m -DsaveInLog=true -jar /licenciador/licenciador_Plataform.jar &
[Install]
WantedBy=multi-user.target

'''''''''''''''''
Obs:
- a aplicação esta no "/licenciador" conforme descrito no código.
- já tentei outros "types" como oneshot e forking.
- já tentei no "execstart" colocar o "diretório" "/licenciador/licenciador.sh"
- o código do licenciador.sh que funciona subindo na "mão" é o descrito no execstart.
"""""""""


Como o "rc.local" não é mais padrão nesse kernel atualizado do ubuntu, por isso quero configurar o systemd, para ver se a falha na inicialização não ocorre.

Acredito que consegui demonstrar bem meu ambiente.

desde já sou grato pela ajuda.




  


2. Re: Systemd, como iniciar uma aplicação terceira? [RESOLVIDO]

Diego Mendes Rodrigues
diegomrodrigues

(usa Ubuntu)

Enviado em 20/07/2018 - 19:33h

Mario,

Veja se esse material te ajuda.
https://www.ubuntudoc.com/how-to-create-new-service-with-systemd/?lang=pt

Abraço,
Diego M. Rodrigues


3. Re: Systemd, como iniciar uma aplicação terceira?

Alberto Federman Neto.
albfneto

(usa openSUSE)

Enviado em 21/07/2018 - 11:54h

Em Sabayon é assim, em outros linux, possivelmente parecido:

https://www.vivaolinux.com.br/dica/systemd-no-Sabayon-Adicionando-servicos-manualmente.

Vc colocou o seu serviço no systemd.... checou se está funcionando? use este comando:


# systemctl status licenciador.service

Mas... systemd frequentemente é enrolado para configura o funcionamento do aplicativo
.... já tentou colocar o script sh no cron?
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: Sabayon, Gentoo, openSUSE, Mageia e OpenMandriva.


4. Re: Systemd, como iniciar uma aplicação terceira? [RESOLVIDO]

Mário Henrique da Silva Truber
mariotruber

(usa Outra)

Enviado em 23/07/2018 - 08:10h

diegomrodrigues escreveu:

Mario,

Veja se esse material te ajuda.
https://www.ubuntudoc.com/how-to-create-new-service-with-systemd/?lang=pt

Abraço,
Diego M. Rodrigues


Olá Diego. Muito bom o material, muito obrigado pela ajuda.
Vou colocar algumas configurações em prática, e ver os resultados.

Assim que tiver novidades aviso.

Att

Mário Truber


5. Re: Systemd, como iniciar uma aplicação terceira? [RESOLVIDO]

Mário Henrique da Silva Truber
mariotruber

(usa Outra)

Enviado em 23/07/2018 - 08:35h

albfneto escreveu:

Em Sabayon é assim, em outros linux, possivelmente parecido:

https://www.vivaolinux.com.br/dica/systemd-no-Sabayon-Adicionando-servicos-manualmente.

Vc colocou o seu serviço no systemd.... checou se está funcionando? use este comando:


# systemctl status licenciador.service

Mas... systemd frequentemente é enrolado para configura o funcionamento do aplicativo
.... já tentou colocar o script sh no cron?
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: Sabayon, Gentoo, openSUSE, Mageia e OpenMandriva.



Olá Albfneto, desde já sou grato pela ajuda.
Então, esses são os resultados quando tentei ativar e iniciar o serviço via systemctl:

root@servidor-089:/etc/systemd/system# systemctl enable licenciador
Synchronizing state of licenciador.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable licenciador
update-rc.d: error: licenciador Default-Start contains no runlevels, aborting.

root@servidor-089:/etc/systemd/system# systemctl start licenciador
Failed to start licenciador.service: Unit licenciador.service is not loaded properly: Bad message.
See system logs and 'systemctl status licenciador.service' for details.


Ainda não tentei via cron, mas vou testar também após os testes via systemd.

Abrigado pela força. Assim que obtiver os resultados posto aqui as atualizações.

Att

Mário Truber





6. Re: Systemd, como iniciar uma aplicação terceira? [RESOLVIDO]

Mário Henrique da Silva Truber
mariotruber

(usa Outra)

Enviado em 25/07/2018 - 17:16h

mariotruber escreveu:

Olá, Sou Mário Truber e estou com dificuldades para configurar uma aplicação como service no systemd.

O ambiente é o seguinte:
Estou utilizando o Ubuntu 18.04 e tenho uma aplicação em java que executa um licenciamento de um banco de dados. Preciso que essa aplicação que faz o licenciamento suba junto com o S.O, eu consigo fazer isso facilmente criando um "rc.local" no "/etc", porém quando faço isso e reinicio o S.O, simplesmente trava a reinicialização, na verdade o sistema não consegue encerrar a aplicação e por isso não desliga/reinicia.
Quando eu não configuro a aplicação de licenciamento no "rc.local" e subo ela na "mão" (executando direto o /licenciador.sh) o S.O reinicia/desliga normalmente.

Resumindo a obra, quero automatizar a inicialização da aplicação, mas não posso utilizar o método "rc.local" devida a falha que apresenta na hora de reiniciar o S.O.


As configurações que tentei para iniciar via systemd:


criei no "/etc/systemd/system" o objeto "licenciador.service" e dentro dele coloquei os seguintes parâmetros:
[Unit]
Description=licenciador service
After=network.service

[Service]
Type=simple
ExecStart=/licenciador/jre/bin/java -Xmx256m -DsaveInLog=true -jar /licenciador/licenciador_Plataform.jar &
[Install]
WantedBy=multi-user.target

'''''''''''''''''
Obs:
- a aplicação esta no "/licenciador" conforme descrito no código.
- já tentei outros "types" como oneshot e forking.
- já tentei no "execstart" colocar o "diretório" "/licenciador/licenciador.sh"
- o código do licenciador.sh que funciona subindo na "mão" é o descrito no execstart.
"""""""""


Como o "rc.local" não é mais padrão nesse kernel atualizado do ubuntu, por isso quero configurar o systemd, para ver se a falha na inicialização não ocorre.

Acredito que consegui demonstrar bem meu ambiente.

desde já sou grato pela ajuda.





Olá pessoal, desde já sou grato a ajuda prestada aqui no post.
Consegui efetuar a configuração para que o licenciador seja iniciado e obedeça os comando de um "service" padrão no kernel do Ubuntu 18, conforme apresentei a falha na primeira postagem.

Vou deixar aqui a solução que utilizei. Com ela sanei todas as falha supracitadas e o serviço está respondendo perfeitamente como se fosse nativo.
Você pode usar a mesma metodologia caso utilize ou precise utilizar aplicações "terceiras" no ser Ububtu 16 ou 18 (que eram as distribuições que apresentavam a dificuldade que relatei no primeiro post)


SOLUÇÃO:

1º passo:
navegar até
~: /etc/init.d#

2º passo:
criar o arquivo "licenciador" com permissão (lembrando que no primeiro post tem a instalação do "licenciador" que eu preciso utilizar, você pode ler como "sistema terceiro" que vc precise colocar no boot mas esta enfrentando a mesma dificuldade que relatei anterioremente)
~: touch "licenciador"
~: chmod +x "licenciador"

3º passo:
colar o script abaixo dentro do arquivo "licenciador"
\/ \/ \/ \/

#!/bin/bash

### BEGIN INIT INFO
# Provides: noughy
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start licenciador
# Description: Start licenciador
### END INIT INFO
# /etc/init.d/licenciador

case "$1" in
start )

echo "Starting licenciador service"

#To run it as root:

/noughy/startLicenciador.sh &
;;

stop )

echo "Stopping licenciador"

#To run it as root:

#/path/to/command/to/stop/counter

#Or to run it as some other user:

#/bin/su - username -c /path/to/command/to/stop/counter

#echo "."

kill -9 `ps -ef | grep -i 'noughy' | grep -v grep | gawk '{print $2}'`

;;



*)

echo "Usage: /etc/init.d/licenciador {start|stop}"

exit 3
;;
esac




/\ /\ /\ /\

4º passo:
atribuir ao script de inicialização as permissões de boot no "rc.d"
~: update-rc.d licenciador defaults 2 3 4 5


Agora o "licenciador" ja está sendo inicializado automaticamente e não
apresenta mais a falha de travar o S.O no momento de encerrar o
serviço "licenciador".



Espero que essa minha breve jornada pelos scripts e estruturas do Ubuntu ajudem muitos que se encontram na mesma "pindaiba".


vlw pela força

até a proxima.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts