相关疑难解决方法(0)

如何确定系统是否使用 SysV、Upstart 或 Systemd initsystem

是否有一种简单的方法可以找出正在使用的 initsystem,例如最近的系统Debian wheezyFedora系统正在使用哪个 initsystem ?我知道Fedora 21使用systemdinitsystem 但那是因为我读过它并且因为所有相关的脚本/符号链接都存储在/etc/systemd/. 但是,我不确定例如Debian squeezeCentOS 6 or 7等等。

有哪些技术可以验证这种初始化系统?

linux systemd init upstart sysvinit

97
推荐指数
4
解决办法
11万
查看次数

可移植 shell 编程的资源

有哪些可移植 shell 编程的资源?最终的答案是在所有目标平台上进行测试,但这很少实用。

POSIX /统一UNIX规范是一个开始,但它会告诉你没有什么支持每个实现的程度,也没有什么共同的扩展存在。您可以阅读每个实现的文档,但这非常耗时且不完全准确。

在我看来,理想的格式应该是 POSIX 规范的某种社区注释版本,其中每个功能都按其在不同实现中的支持级别进行注释。有这样的事情吗?或者还有其他有用的资源吗?

例如,有Sven Mascheck 的 shell portability pages,但它只涉及语法元素和一些内置函数,并且只涵盖旧 shell。我正在寻找更全面的资源。

shell standard reference portability

71
推荐指数
3
解决办法
5204
查看次数

检查系统是否在 BASH 中使用 systemd 或 sysvinit 的便捷方法?

我正在定义要在不同发行版中使用的通用 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)

linux scripting systemd sysvinit

53
推荐指数
1
解决办法
9万
查看次数

如何在 shell 脚本中确定它是否被 systemd 调用?

我们有一个 shell 脚本——出于各种原因——包装供应商的应用程序。我们有系统管理员和应用程序所有者,他们对 systemd 的熟悉程度参差不齐。因此,在应用程序失败的情况下(systemctl 表示同样多),一些最终用户(包括“root”系统管理员)可能会使用包装脚本“直接”启动应用程序,而不是使用systemctl restart. 这可能会在重新启动期间导致问题,因为 systemd 不会调用正确的关闭脚本——因为就其而言,应用程序已经停止。

为了帮助指导向 systemd 的过渡,我想更新包装器脚本以确定它是由 systemd 还是由最终用户调用;如果它systemd之外被调用,我想向调用者打印一条消息,告诉他们使用 systemctl。

如何在 shell 脚本中确定它是否被 systemd 调用?

你可以假设:

  • 包装脚本的 bash 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。

shell-script systemd

24
推荐指数
4
解决办法
1847
查看次数

ps的COMMAND列中的`init [2]`是什么意思?

阅读进程周围的括号是什么意思?我知道打印了可执行文件名。

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]?为什么要打印?

(另外,如果它知道可执行文件名称,我真的不明白为什么它不能显示完整路径。)

ps executable init sysvinit command

5
推荐指数
1
解决办法
1585
查看次数

如何在不安装或启动的情况下确定 Linux 发行版是 systemd 还是 sysV init?

我在某处注意到大多数 Linux 发行版都基于 Systemd 而不是 SysV init。

所以我只想知道没有安装和启动。有没有可能找到基于 Systemd 或 SysV init 的发行版?

linux boot systemd init sysvinit

2
推荐指数
1
解决办法
3066
查看次数