Eu tenho um programa executável Java que posso executar digitando java -jar abc.jar
no terminal. Como posso executá-lo como um serviço? Quero executá-lo como um serviço, digitando service abc start
.
Eu tenho um programa executável Java que posso executar digitando java -jar abc.jar
no terminal. Como posso executá-lo como um serviço? Quero executá-lo como um serviço, digitando service abc start
.
Respostas:
Verifique se você está no 14.04. O Ubuntu 16.04 (e superior) usa systemd, não Upstart.
Um script inicial é um arquivo de script colocado /etc/init/
e terminado em .conf
.
Requer 2 seções: uma para indicar quando iniciar e outra com o comando para executar.
O script mais fácil para começar com sua amostra é:
# myprogram.conf
start on filesystem
exec /usr/bin/java -jar /path_to/program
Criado como root em /etc/init/myprogram.conf
.
Se o seu script exigir mais de uma linha de comando, use a script
seção em vez da exec
linha:
# myprogram.conf
start on filesystem
script
/usr/bin/java -jar /path_to/program
echo "Another command"
end script
Para habilitar a conclusão do bash para o seu serviço, adicione um link simbólico na /etc/init.d
pasta:
sudo ln -s /etc/init/myprogram.conf /etc/init.d/myprogram
Em seguida, tente iniciar e pará-lo:
sudo service myprogram start
De acordo com o livro de receitas inicial , você pode criar pre-start
/ post-start
e pre-stop
/ post-stop
comandos a serem executados.
Além disso, li que você deseja verificar se um processo está em execução. Verifique esta pergunta e talvez use a pre-start
seção
sudo chmod +x /etc/init.d/myprogram
. CUIDADO: seu método respondido não funciona no Ubuntu 16.04!
Você precisa criar um iniciante. http://upstart.ubuntu.com/getting-started.html
Upstart é (IMHO) um desastre comparado aos bons scripts de inicialização do SysV. Upstart é MUITO mais esforço, com pouca vantagem no trabalho adicionado. Com isso dito, suspeito que haverá alguns defensores iniciantes por aí que me levarão a tarefa de declarar o óbvio ;-)