Como fazer um aplicativo ser executado como um daemon no Ubuntu quando instalado?

6

Eu tenho um aplicativo Java - embora a resposta aqui deva ser a mesma, independentemente de ser Java, Ruby, Python, etc. - que eu gostaria de distribuir de tal maneira que quando devops forem instalá-lo, ele é executado automaticamente como um daemon, com zero configurações ao lado deles. Minha inspiração para isso vem do daemon do Docker , que está escrito em Go, mas que se automagicamente se configura como um daemon em máquinas Ubuntu. Eu quero fazer o mesmo, mas não tenho ideia de onde começar.

Eu imagino que:

  • Eu preciso de alguma forma empacotar meu aplicativo dentro de um deb ; ou
  • Envie meu executável do aplicativo com o init / systemd / upstart / etc. scripts que de alguma forma são instalados localmente sem que o usuário final precise executá-los. No entanto, neste caso, não sei como selecionar quais scripts instalar como o usuário pode ter qualquer uma das várias configurações de ferramentas parecidas com init .

Alguma idéia?

    
por smeeb 23.07.2015 / 16:24

1 resposta

3

No Ubuntu (e Debian), criar um pacote deb seria o melhor caminho a ser seguido, já que tudo pode ser automatizado, para que nenhuma intervenção do usuário final seja necessária. Os únicos casos em que a instalação ou upgrades de pacotes não são automatizados são se o pacote tiver algumas opções de configuração que precisem de entrada do usuário (principalmente durante a instalação apenas) ou se um arquivo de configuração foi modificado pelo usuário e também modificado por uma versão mais nova o pacote (durante a atualização). Além disso, depois de instalar / atualizar um pacote, todos os scripts de inicialização que ele instala são iniciados automaticamente.

Você pode ter vários scripts init instalados e ter tudo ainda funcionando. No caso de systemd sendo instalado e usado no computador do usuário, se houver um script init e um systemd para o mesmo serviço, o script init será ignorado e o script systemd é usado.

Em termos de empacotamento em si, o Debian fornece scripts auxiliares que (entre outras coisas) instalam automaticamente quaisquer scripts de inicialização que você forneça (eu não acho que upstart é suportado por seus scripts auxiliares, pois isso é usado apenas no Ubuntu ) e inicie o serviço. Para um exemplo da embalagem, veja esta debian pasta para o pacote dump1090-mutability . (Aviso: esta é minha conta do Github) Observe que o arquivo dump1090-mutability.init contém o script init , enquanto o arquivo dump1090-mutability.service contém o script systemd . Observe que os nomes desses arquivos devem ser package-name.init e package-name.service , em que package-name é o nome do pacote binário sendo criado. (Veja man dh_systemd_enable e man dh_systemd_start para o caso do systemd.)

No empacotamento, esses dois arquivos são colocados nos diretórios apropriados no sistema do usuário e o serviço é iniciado. Para o arquivo rules , eu recomendo que você tenha algo como o seguinte, para que você se beneficie da automação (consulte isto para a parte --with systemd ):

#!/usr/bin/make -f
%:
        dh $@ --with systemd

override_dh_auto_build:
        # Specify how to build the Java files here, if there is no Makefile provided

override_dh_auto_install:
        # Specify how to install the Java files here, if there is no 'install' target in the Makefile. Don't worry about anything in the 'debian' directory unless you need to install some icons.
  • Se seu aplicativo não tiver um Makefile e for apenas uma coleção de arquivos de origem Java, preencha override_dh_auto_build (onde os arquivos de origem são compilados e empacotados em um JAR) e override_dh_auto_install (onde o JAR está instalado ).
  • Se seu aplicativo tiver um Makefile, mas não tiver uma meta install , remova a meta override_dh_auto_build e preencha override_dh_auto_install .
  • Se seu aplicativo tiver um Makefile e ele tiver uma meta install (que pode ser usada), remova os dois destinos.
  • Se o seu aplicativo for apenas um arquivo JAR, remova override_dh_auto_build e preencha override_dh_auto_install .
por saiarcot895 28.07.2015 / 17:55