Configure o daemon para iniciar na inicialização com o systemd

3

Estou escrevendo um daemon para gerenciar meu aplicativo Java em uma caixa Ubuntu 16.04 usando jsvc e tutorial (provavelmente pré-systemd) , e chegou até a executar update-rc.d mydaemon enable , recebendo o erro

update-rc.d: error: mydaemon Default-Start contains no runlevels, aborting

Tendo pesquisado um pouco sobre o Google, isso parece ter algo a ver com a recente mudança (relativamente?) para systemd , que eu confirmei que está sendo executado com pidof systemd .

Como obtenho o mesmo comportamento de inicialização em update-rc.d (e, mais importante, parando o serviço via /etc/init.d/mydaemon stop em vez de apenas matar o processo, pois o aplicativo Java precisa limpar acima). E são systemd e update-rc.d sistemas diferentes, ou systemd apenas muda como este último funciona?

    
por Luke Moll 03.09.2016 / 15:46

1 resposta

4

Eu não tenho um Ubuntu 16.04 para testar isso, ou forneço muitos detalhes, mas o systemd tem um recurso de compatibilidade para permitir que os antigos scripts /etc/init.d continuem funcionando. Em vez de usar update-rc.d para habilitar seu daemon, use o comando nativo systemd equivalente:

sudo systemctl enable mydaemon

Se isso ainda produzir o mesmo erro, adicione as linhas ausentes ao conjunto inicial de comentários em seu script:

# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6

entre as linhas ### BEGIN INIT INFO e ### END INIT INFO e tente novamente. Consulte a descrição LSB core para essas linhas. Você também pode iniciar o daemon explicitamente com

sudo systemctl start mydaemon

e pergunte pelo seu status com

sudo systemctl status -l mydaemon

Veja man systemd-sysv-generator para o recurso de compatibilidade. Veja este wiki para converter o System V ou scripts upstart como o seu para unidades systemd nativas.

    
por 03.09.2016 / 19:57