使用shell检测init系统

Modified on: Sat, 30 Jun 2018 10:27:00 +0800

这可能与检测操作系统有关,但我特别需要系统上当前使用的init系统。

Fedora 15和Ubuntu现在使用systemd,Ubuntu曾经使用Upstart(长时间默认为15.04),而其他人则使用System V的变体。

我有一个应用程序,我写的是一个跨平台的守护进程。 init脚本是根据可以在configure上传递的参数动态生成的。

我想要做的只是为他们正在使用的特定init系统生成脚本。这样,安装脚本可以合理地运行,不需要以root身份参数,并且可以自动“安装”守护进程。

这就是我想出来的:

  • 在/ bin
  • 中搜索systemd,upstart等
  • 将/ proc / 1 / comm与systemd,upstart等进行比较
  • 询问用户

这样做最好的跨/平台方式是什么?

有点相关,我可以依赖bash占据* nix的大部分,还是依赖于分发/操作系统?

目标平台:

  • Mac OS
  • Linux(所有发行版)
  • BSD(所有版本)
  • Solaris,Minix和其他* nix
作者:phk,tjameson

最佳答案

对于第二个问题,答案是,你应该看看便携式shell编程资源

至于第一部分 - 首先,你当然要小心。我会说执行几项测试以确保 - 因为某人安装了 systemd(例如)的事实并不意味着它实际上被用作默认值init。此外,查看/proc/1/comm可能会产生误导,因为各种init程序的某些安装可以自动使/sbin/init成为符号链接硬链接甚至是重命名的版本他们的主要计划。

也许最有用的可能是查看init脚本类型 - 因为这些是你实际创建的,无论运行它们是什么。

作为旁注,您可能还要查看OpenRC,其目的是提供一种与Linux和BSD系统兼容的init脚本结构。


相关问答

添加新评论