我会说不要查看当前的发行版来确定使用哪个 init 系统来管理守护进程:
虽然这不是万无一失的(一个系统可能会选择安装多个彼此并排的 init 系统),但我这样做的方法是寻找工具本身的存在:
if command -v systemctl >/dev/null; then
# assume systemd
systemctl $command $servicename
elif command -v initctl >/dev/null; then
# assume upstart
initctl $command $servicename
elif command -v service >/dev/null; then
# assume old Debian `service` utility
service $servicename $command
# ... elif cases for any other utils you'd want to check for ...
else
# assume bare init.d scripts
/etc/init.d/$servicename $command
fi
Run Code Online (Sandbox Code Playgroud)
This answer to a similar question描述了一些进一步的启发式方法,您可以使用它来确定当前使用的初始化系统,用于不够准确的情况。
但最终,没有一种方法可以真正检测安装“使用”哪个 init 系统 - 可以创建每次启动时在 init 系统之间切换的设置。