web-dev-qa-db-fra.com

Comment faire en sorte qu'une application s'exécute en tant que démon sur Ubuntu lorsqu'elle est installée?

J'ai une application Java - bien que la réponse ici devrait être la même, que ce soit en Java, Ruby, Python, etc. installez-le, il fonctionne automatiquement comme un démon, avec zéro config de leur côté. Mon inspiration pour cela vient du démon Docker , qui est écrit en Go mais qui se configure automatiquement comme un démon sur les machines Ubuntu. Je veux faire la même chose, mais je ne sais pas par où commencer.

Je voudrais imaginer que soit:

  • Je dois en quelque sorte emballer mon application dans un deb; ou
  • Expédier mon exécutable de l'application avec les init/systemd/upstart/etc. Nécessaires. les scripts qui sont en quelque sorte installés localement sans que l'utilisateur final ait à les exécuter. Cependant, dans ce cas, je ne sais pas comment sélectionner les scripts à installer, car l’utilisateur peut utiliser un des nombreux outils de type init-.

Des idées?

6
smeeb

Sur Ubuntu (et Debian), la création d'un paquetage deb serait la meilleure solution, car tout peut être automatisé, de sorte qu'aucune intervention de l'utilisateur final n'est nécessaire. Les seuls cas dans lesquels l'installation ou les mises à niveau du package ne sont pas automatisées sont les cas où le package comporte certaines options de configuration nécessitant une intervention de l'utilisateur (principalement lors de l'installation uniquement) ou si un fichier de configuration a été modifié par l'utilisateur et est également modifié par une version plus récente de le paquet (lors de la mise à niveau). En outre, après l’installation/la mise à niveau d’un package, les scripts de démarrage qu’il installe sont automatiquement démarrés.

Vous pouvez installer plusieurs scripts init et tout fonctionne encore. Dans le cas où systemd est installé et utilisé sur l'ordinateur de l'utilisateur, s'il existe un script init et un script systemd pour le même service, le script init est ignoré et le script systemd est utilisé.

En ce qui concerne le packaging, Debian fournit des scripts d'assistance qui (entre autres choses) installent automatiquement tous les scripts de démarrage que vous fournissez (je ne pense pas que upstart soit pris en charge par leurs scripts d'assistance, car il n'est utilisé que sur Ubuntu) et démarrez le service. Pour un exemple d’emballage, voir le dossier thisdebian du paquet dump1090-mutability. (Avertissement: ceci est mon compte Github) Notez que le fichier dump1090-mutability.init contient le script init tandis que le fichier dump1090-mutability.service contient le script systemd. Notez que les noms de ces fichiers doivent être package-name.init et package-name.service, où package-name est le nom du package binaire en cours de création. (Voir man dh_systemd_enable et man dh_systemd_start pour le cas systemd.)

Lors du conditionnement, ces deux fichiers sont placés dans les répertoires appropriés du système de l'utilisateur, puis le service est démarré. Pour le fichier rules, il est recommandé d'utiliser le système suivant pour vous permettre de bénéficier de l'automatisation (voir this pour la partie --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.
  • Si votre application ne comporte pas de Makefile et constitue simplement une collection de fichiers source Java, renseignez override_dh_auto_build (où les fichiers source sont compilés et empaquetés dans un JAR) et override_dh_auto_install (où le JAR est installé). .
  • Si votre application contient un Makefile, mais pas de cible install, supprimez la cible override_dh_auto_build et remplissez override_dh_auto_install.
  • Si votre application contient un fichier Makefile et une cible install (pouvant être utilisée), supprimez les deux cibles.
  • Si votre application est uniquement un fichier JAR, supprimez override_dh_auto_build et remplissez override_dh_auto_install.
3
saiarcot895