Eu tenho um programa executável Java que posso executar digitando java -jar abc.jarno terminal. Como posso executá-lo como um serviço? Quero executá-lo como um serviço, digitando service abc start.
Uma resposta mais completa está aqui: unix.stackexchange.com/questions/1924/… Basicamente, no Ubuntu, você pode criar um script para /etc/init.d que pode iniciar / parar / reiniciar seu serviço.
Ed Ed
Respostas:
41
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 scriptseção em vez da execlinha:
# 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.dpasta:
Talvez você precise torná-lo executável com sudo chmod +x /etc/init.d/myprogram. CUIDADO: seu método respondido não funciona no Ubuntu 16.04!
juliocesar 30/01
2
O @juliocesar 16.04 usa systemd, não o Upstart.
Rael Gugelmin Cunha
start onnão é uma estrofe necessária. Como você pode ler aqui : Esse trabalho só pode ser controlado por um administrador .
SuB
@SuB sim, mas o trabalho não será iniciado automaticamente, e ficou claro que o autor da pergunta deseja algo agindo como um serviço, ou seja, iniciando automaticamente.
Rael Gugelmin Cunha
Sim. Eu sei. acabou de adicionar um comentário para completar sua resposta.
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 ;-)
É apenas um arquivo em /etc/init/yourservice.conf com uma linha indicando quando iniciar e outra no comando exec. O Fedora também usa o iniciante. Além disso, até o Debian está alterando seu esquema inicial para SystemD, que será o esquema do Ubuntu no futuro.
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 é:
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 daexec
linha:Para habilitar a conclusão do bash para o seu serviço, adicione um link simbólico na
/etc/init.d
pasta:Em seguida, tente iniciar e pará-lo:
De acordo com o livro de receitas inicial , você pode criar
pre-start
/post-start
epre-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çãofonte
sudo chmod +x /etc/init.d/myprogram
. CUIDADO: seu método respondido não funciona no Ubuntu 16.04!start on
não é uma estrofe necessária. Como você pode ler aqui : Esse trabalho só pode ser controlado por um administrador .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 ;-)
fonte