Como criar um serviço no Ubuntu Upstart

21

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.

mehmet mecek
fonte
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:

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-starte pre-stop/ post-stopcomandos 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-startseção

Rael Gugelmin Cunha
fonte
1
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.
SuB
0

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

Andrew
fonte
1
É 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.
Rael Gugelmin Cunha