是否有一种简单的方法可以找出正在使用的 initsystem,例如最近的系统Debian wheezy
或Fedora
系统正在使用哪个 initsystem ?我知道Fedora 21
使用systemd
initsystem 但那是因为我读过它并且因为所有相关的脚本/符号链接都存储在/etc/systemd/
. 但是,我不确定例如Debian squeeze
或CentOS 6 or 7
等等。
有哪些技术可以验证这种初始化系统?
有哪些可移植 shell 编程的资源?最终的答案是在所有目标平台上进行测试,但这很少实用。
该POSIX /统一UNIX规范是一个开始,但它会告诉你没有什么支持每个实现的程度,也没有什么共同的扩展存在。您可以阅读每个实现的文档,但这非常耗时且不完全准确。
在我看来,理想的格式应该是 POSIX 规范的某种社区注释版本,其中每个功能都按其在不同实现中的支持级别进行注释。有这样的事情吗?或者还有其他有用的资源吗?
例如,有Sven Mascheck 的 shell portability pages,但它只涉及语法元素和一些内置函数,并且只涵盖旧 shell。我正在寻找更全面的资源。
我正在定义要在不同发行版中使用的通用 bash 文件。我需要一种方法来检查系统是使用 systemd 还是 sysvinit (/etc/init.d/)。我需要这个,所以我运行适当的命令来启动服务。检查这个的安全方法是什么?我目前检查 systemctl 命令是否存在,但这真的是一个选项,因为可能存在 systemctl 命令可用的情况,但这并不一定意味着实际使用了 systemd?
这是我当前 bash 脚本的摘录:
#!/bin/sh
if [ command -v systemctl >/dev/null ]
then
systemctl service start
else
/etc/init.d/service start
fi
Run Code Online (Sandbox Code Playgroud) 我们有一个 shell 脚本——出于各种原因——包装供应商的应用程序。我们有系统管理员和应用程序所有者,他们对 systemd 的熟悉程度参差不齐。因此,在应用程序失败的情况下(systemctl 表示同样多),一些最终用户(包括“root”系统管理员)可能会使用包装脚本“直接”启动应用程序,而不是使用systemctl restart
. 这可能会在重新启动期间导致问题,因为 systemd 不会调用正确的关闭脚本——因为就其而言,应用程序已经停止。
为了帮助指导向 systemd 的过渡,我想更新包装器脚本以确定它是由 systemd 还是由最终用户调用;如果它在systemd之外被调用,我想向调用者打印一条消息,告诉他们使用 systemctl。
如何在 shell 脚本中确定它是否被 systemd 调用?
你可以假设:
systemd 服务的一个例子可能是:
[Unit]
Description=Vendor's Application
After=network-online.target
[Service]
ExecStart=/path/to/wrapper start
ExecStop=/path/to/wrapper stop
Type=forking
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
我对检测 init system不感兴趣,因为我已经知道它是 systemd。
阅读进程周围的括号是什么意思?我知道打印了可执行文件名。
Linux ps手册页:
有时进程参数将不可用;发生这种情况时, ps 将改为在括号中打印可执行文件名称。
但是ps -Awwo pid,comm,args
我得到:
PID COMMAND COMMAND
1 init init [2]
Run Code Online (Sandbox Code Playgroud)
这是什么意思?“可执行名称”应该是init
还是[2]
?
我想可执行文件当然是init
- 什么是[2]
?为什么要打印?
(另外,如果它知道可执行文件名称,我真的不明白为什么它不能显示完整路径。)
我在某处注意到大多数 Linux 发行版都基于 Systemd 而不是 SysV init。
所以我只想知道没有安装和启动。有没有可能找到基于 Systemd 或 SysV init 的发行版?
systemd ×4
sysvinit ×4
init ×3
linux ×3
boot ×1
command ×1
executable ×1
portability ×1
ps ×1
reference ×1
scripting ×1
shell ×1
shell-script ×1
standard ×1
upstart ×1