安装后如何使应用程序在 Ubuntu 上作为守护程序运行?

sme*_*eeb 6 package-management upstart deb services software-installation

我有一个 Java 应用程序 - 尽管这里的答案应该是相同的,无论它是 Java、Ruby、Python 等 - 我想以这样的方式分发它,当开发人员去安装它时,它会自动运行作为守护进程,他们的配置为零。我对此的灵感来自Docker 守护进程,它是用 Go 编写的,但它会自动将自己配置为 Ubuntu 机器上的守护进程。我也想这样做,但不知道从哪里开始。

我会想象

  • 我需要以某种方式将我的应用程序打包到一个deb; 或者
  • 将我的应用程序可执行文件与必要的init/ systemd/ upstart/ 等一起发送。以某种方式在本地安装的脚本,而最终用户不必运行它们。但是,在这种情况下,我不确定如何选择要安装的脚本,因为用户可能具有多种init类似工具设置中的任何一种。

有任何想法吗?

sai*_*895 3

在 Ubuntu(和 Debian)上,创建deb包将是最好的方法,因为一切都可以自动化,因此不需要最终用户干预。软件包安装或升级不自动化的唯一情况是,软件包有一些需要用户输入的配置选项(主要仅在安装期间),或者配置文件被用户修改,并且也被较新版本的修改。包(升级期间)。此外,安装/升级软件包后,它安装的任何启动脚本都会自动启动。

您可以init安装多个脚本,并且一切仍然有效。systemd在用户计算机上安装使用的情况下,如果同一个服务同时存在init脚本和脚本,则忽略该脚本并使用该脚本。systemdinitsystemd

就打包本身而言,Debian 提供了帮助程序脚本(除其他外)自动安装您提供的任何启动脚本(我认为upstart他们的帮助程序脚本不支持,因为这仅在 Ubuntu 上使用)并启动服务。有关打包示例,请参阅该包的 文件夹。(免责声明:这是我的 Github 帐户)请注意,文件包含脚本,而文件包含脚本。请注意,这些文件的名称应该是和,其中是正在创建的二进制包的名称。(参见和获取 systemd 案例。)debiandump1090-mutabilitydump1090-mutability.initinitdump1090-mutability.servicesystemdpackage-name.initpackage-name.servicepackage-nameman dh_systemd_enableman dh_systemd_start

打包时,这两个文件都被放置在用户系统上的适当目录中,然后启动服务。对于该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.
Run Code Online (Sandbox Code Playgroud)
  • 如果您的应用程序没有 Makefile,而只是 Java 源文件的集合,请填写override_dh_auto_build(源文件编译并打包到 JAR 的位置)和override_dh_auto_install(安装 JAR 的位置)。
  • 如果您的应用程序有 Makefile,但没有install目标,请删除override_dh_auto_build目标并填写override_dh_auto_install.
  • 如果您的应用程序有一个 Makefile 并且有一个install目标(可以使用),请删除这两个目标。
  • 如果您的应用程序只是一个 JAR 文件,请删除override_dh_auto_build并填写override_dh_auto_install