Как сделать выполнение приложения как демон на Ubuntu при установке?

У меня есть приложение Java - хотя ответ здесь должен быть тем же независимо от того, является ли это Java, Ruby, Python, и т.д. - что я хотел бы распределить таким способом, которым, когда devops люди идут для установки его, это автоволшебно работает как демон с нулевой конфигурацией на их стороне. Мое вдохновение для этого прибывает от демона Докера, который записан в Движении, но это автоволшебно настраивает себя как демон на машинах Ubuntu. Я хочу сделать то же, но не иметь никакой подсказки, где даже начать.

Я предположил бы что также:

  • Я должен так или иначе упаковать свое приложение внутри a deb; или
  • Поставьте мой исполняемый файл приложения с необходимым init/systemd/upstart/ и т.д. сценарии, которые так или иначе установлены локально без конечного пользователя, имеющего необходимость выполнять их. Однако в этом случае я не уверен, как выбрать, какие сценарии установить, поскольку у пользователя может быть любой из нескольких init- как установка инструментов.

Какие-либо идеи?

6
задан 28 July 2015 в 08:10

1 ответ

На Ubuntu (и Debian), создавая deb пакет был бы лучшим способом пойти, поскольку все может быть автоматизировано, так, чтобы никакое вмешательство конечного пользователя не было необходимо. Единственные случаи, где установка пакета или обновления не автоматизированы, - то, если пакет имеет некоторые параметры конфигурации, которые должны ввести от пользователя (главным образом только во время установки) или если конфигурационный файл был изменен пользователем и также изменяется более новой версией пакета (во время обновления). Кроме того, после установки/обновления пакета, любые сценарии запуска, которые это устанавливает, автоматически запускаются.

Вы можете иметь приблизительно init сценарии быть установленными и иметь все, все еще работают. В случае systemd устанавливаемый и используемый на компьютере пользователя, если существует и init сценарий и systemd сценарий для того же сервиса, то init сценарий проигнорирован и systemd, используется сценарий.

С точки зрения упаковки себя, Debian предоставляет сценарии помощника, которые (среди прочего) автоматически устанавливают любые сценарии запуска, которые Вы предоставляете (я не думаю upstart, поддерживается их сценариями помощника, так как это только используется на Ubuntu), и запустите сервис. Для примера упаковки см. это debian папка для dump1090-mutability пакет. (Правовая оговорка: это - моя учетная запись GitHub), Примечание, которое dump1090-mutability.init файл содержит init сценарий, в то время как dump1090-mutability.service файл содержит systemd сценарий. Обратите внимание, что названия этих файлов должны быть package-name.init и package-name.service, где package-name название двоичного создаваемого пакета. (См. man dh_systemd_enable и man dh_systemd_start для systemd случая.)

На упаковке, оба из этих файлов помещаются в соответствующие каталоги в системе пользователя, и сервис затем запускается. Для rules файл, я рекомендую иметь что-то как следующее, так, чтобы Вы извлекли выгоду из автоматизации (см. это для --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.
  • , Если Ваше приложение не имеет Make-файла и является просто набором исходных файлов Java, заполните override_dh_auto_build (где исходные файлы компилируются и упаковываются в JAR), и override_dh_auto_install (где JAR установлен).
  • , Если Ваше приложение имеет Make-файл, но не имеет install цель, удаляет эти override_dh_auto_build цель и заполняет override_dh_auto_install.
  • , Если Ваше приложение имеет Make-файл и оно имеет install цель (который может использоваться), удалите обе цели.
  • , Если Ваше приложение является просто файлом JAR, удалите override_dh_auto_build и заполните override_dh_auto_install.
3
ответ дан 23 November 2019 в 08:05

Другие вопросы по тегам:

Похожие вопросы: