我(或我的一位同事)需要编写一个或多个 shell 脚本来控制守护程序的执行。我们需要能够启动守护进程、告诉它正常关闭以及强制关闭。基本上,这是人们传统上使用脚本来完成的事情/etc/init.d
。
我们将部署到 Ubuntu。我们可能想要部署到 RedHat/CentOS,也可能是 AIX。我希望能够部署到任何 UNIX,因为我喜欢便携地做事。
那么,是否可以编写可移植的服务脚本呢?
我想我可以编写一个可移植的 Bourne shell 脚本,它的工作方式类似于普通的 init.d 脚本,并接受“start”和“stop”作为命令。这可以在任何地方工作,并且至少可以在 Debian 和 RedHat 风格的系统上提供自然的界面。它适合在其他地方吗? init.d 是通用的吗?有什么需要注意的陷阱吗?
有没有工具可以生成不同形式的服务脚本?我可以编写用于启动和停止的脚本片段,并让该工具为各种不同平台生成脚本。
是否有特定于平台的服务脚本约定的替代方案?我遇到过守护进程工具和运行;这些是 init.d 脚本的替代品吗?他们有什么好处吗?还有什么像这样的呢?
这有意义吗?
答案1
可以以某种方式编写它们,使其不依赖于发行版的具体情况,但并非所有 *nix 都以相同的方式启动服务。我不确定 AIX,但例如 Solaris 甚至不使用 sysvinit,而是使用 smf。
CentOS/RHEL 通常使用 /etc/rc.d/functions 来协助 init 脚本的常用功能,而 Debian 使用名为 start-stop-daemon 的二进制文件。这可能是上游包中经常找不到初始化脚本的原因。
就我个人而言,我会为每个受支持的操作系统编写一个初始化脚本,并将其包含在该操作系统的软件包中。