我使用 installAnywhere 注册 Windows Service 操作注册 windows NT 服务。
我想要 Linux 也是如此。我想在 Linux 环境中注册服务,但找不到相关操作。
使用installAnywhere在Linux中注册服务的任何想法?
在Unix/Linux世界中,最接近"标准"启动过程的是AT&T System V init(维基百科)方法。这个"标准"是多年前在AT&T的System V上创建的,然后在最常见的Unix和Linux变体中实现了它的变体。
此方法涉及在/etc
目录下基于运行级别创建链接。一些发行版对此采取了与原始AT&T System V方法略有不同的方法(请参阅上面引用的文章)。
在过去的几年里,这已经成为一个更棘手的命题。Unix和Linux发行版中有一种趋势,即放弃SysV init,转而采用解决SysV init方式的一些缺点的新方法(再次,请参阅上面引用的文章)。
在 InstallAnywhere 中,没有固定的"创建 Unix 系统服务"操作。因此,安装工程师自己动手就落在了自己身上。如果你只针对一个Unix/Linux平台,这相对容易:编写和安装脚本和配置文件,并创建链接,以满足你的发行版的标准方法(例如,systemd,Upstart,launchd,SMF等)。对我们来说,我们在嵌入在执行批处理或 Shell 脚本操作中的脚本中完成大部分工作。
如果您面向不同的平台,则需要在安装时确定当前运行的平台,在某些情况下确定您正在运行的平台版本。之后,您需要为当前平台执行正确的安装步骤。
为此,我们创建了应用特定于平台的规则的组操作,这些规则封装了我们支持的平台所需的步骤。在最后的努力中,我们默认使用"标准"AT&T SysV方法,安装脚本并创建所需的链接,以使我们的应用程序能够在我们支持的运行级别中启动。
与此主题相关的还有使用框架来减轻创建 Unix/Linux 系统服务的负担。其中包括:Java Service Wrapper,Yet Another Java Service Wrapper,Apache Commons Daemon等。我建议您在 InstallAnywhere 之外运行和测试脚本,然后创建在安装期间配置系统服务所需的 InstallAnywhere 组操作和执行批处理或 Shell 脚本操作。这是一个乏味的过程,但从长远来看,让每个平台在 InstallAnywhere 之外工作,然后在 InstallAnywhere 中实现该平台将节省您的时间。从好的方面来说,一旦您配置了它并正常工作,您就不必在未来一段时间内更改安装程序的这一部分。
我们正在考虑但尚未转向的另一种方法是使用单个顶级脚本来为我们完成繁重的工作。我们将采用与平台名称相关的标准命名约定和目录结构。在安装过程中,我们会为所有受支持的平台复制安装脚本的整个目录结构。该结构的顶部是一个脚本,它知道如何嗅探当前平台并为该平台执行正确的脚本。如果用户选择将我们的应用程序作为系统服务启用,我们将在安装过程中执行此脚本。在安装结束时,我们将删除安装脚本目录。
这将降低安装程序的复杂性,并允许我们在不更改安装程序的情况下添加对更多平台的支持。如果支持多个平台,则可能希望从此方法开始。从长远来看,如果您希望将来添加对更多平台的支持,这可能会节省您的时间。