【infiniband】opensmd

一、能够正常运行systemctl restart opensm,但是在系统中没有发现opensm.service

如果可以通过 systemctl 来管理 opensm 服务,但是系统中又没有找到对应服务文件 opensm.service,那么有以下几种可能的原因:

1. opensm 服务使用的是系统默认的服务模板【infiniband】opensmd_第1张图片

systemd 有一些默认的服务模板,如 syslog.service、[email protected] 等。如果一个服务没有指定特定的服务文件,会使用这些模板。这种情况下,你可以通过 systemctl cat opensm 命令来查看 opensm 使用的是哪个模板。

2. opensm 服务文件路径不标准

有些服务文件可能被放置在非标准路径,不在 systemd 的搜索路径中,如 /etc/systemd/system/ 或 /usr/lib/systemd/system/ 之外的地方。可以用 systemctl status opensm 来查看服务文件路径。

3. opensm 由其他包管理工具生成

有些软件包在安装时,会自动生成对应的 systemd 服务文件,但不会保存到磁盘上,而是在运行时由包管理工具临时生成。这种情况下,服务文件只存在于系统内存中。

4. opensm 服务通过 socket 激活

有些服务是通过 socket 激活启动的,不需要明确的服务文件,这时可以检查一下 /etc/systemd/system/sockets.target.wants/ 目录下是否有相关的 socket 文件。

5. opensm 的 systemd 服务文件使用了实例化

如果服务文件名称是以 @ 结尾,那么这个服务可能被实例化了。这时需要通过 systemctl show [email protected] 来查看实际的服务实例。

以上都是一些可能的原因,确定原因的方法是先通过 systemctl status 和 systemctl cat 命令来查看 opensm 的详细服务信息。

二、通过 systemctl cat opensm 命令查看到:

# /run/systemd/generator.late/opensmd.service
# Automatically generated by systemd-sysv-generator[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/init.d/opensmd
Description=LSB: Manage OpenSM
After=openibd.service[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
SuccessExitStatus=5 6
ExecStart=/etc/init.d/opensmd start
ExecStop=/etc/init.d/opensmd stop
ExecReload=/etc/init.d/opensmd reload

【infiniband】opensmd_第2张图片根据你提供的 systemctl cat opensm 的输出结果来看,这个 opensm 服务是由 systemd-sysv-generator 自动生成的。
这个 generator 会读取系统中存在的 SysV init 脚本(在 /etc/init.d/ 目录下),并自动为其生成对应的 systemd unit 文件。
所以实际上你系统中应该存在 /etc/init.d/opensmd 这个 SysV 的 init 脚本,systemd-sysv-generator 根据这个脚本自动生成了 opensm.service。
但是该生成的 unit 文件仅仅在系统内存中临时存在,不会写入磁盘。这也就是为什么你找不到实际的 opensm.service 文件的原因。
这种由 SysV init 脚本转换而来的系统服务,其配置比较简单,只包含了一些必要的信息,不如自定义编写的 systemd unit 文件灵活。
如果你需要添加更多的配置,或者想要持久保存这个系统服务,可以考虑直接编写一个 opensm.service 文件,放到 /etc/systemd/system/ 目录下,内容可以参考系统内存中生成的 unit 文件,然后进行修改、完善。

三、systemctl使用帮助

systemctl 是 systemd 的系统管理工具,用于管理系统服务、守护进程、启动目标等。下面介绍一下systemctl的常用命令和参数:

1. 管理服务【infiniband】opensmd_第3张图片

- systemctl start/stop/restart/reload 服务名:启动、停止、重启、重新加载服务
- systemctl enable/disable 服务名:设置服务开机自启动
- systemctl status 服务名:查看服务当前状态和运行日志

2. 管理系统

- systemctl reboot/poweroff/suspend:重启、关闭、睡眠计算机
- systemctl rescue/emergency:进入救援或紧急模式
- systemctl default:回到默认模式

3. 查看信息

- systemctl list-units:列出活动单元
- systemctl list-unit-files:列出所有单元文件
- systemctl cat 服务名:查看服务配置文件
- systemctl show 服务名:显示服务运行状态信息

4. 管理目标

- systemctl get-default:显示当前默认目标
- systemctl set-default 目标名:设置默认目标
- systemctl isolate 目标名:切换到指定目标

5. 其它

- systemctl daemon-reload:重新加载配置
- systemctl reset-failed:清除失败状态
- systemctl kill 服务名:终止服务


系统单元类型包括服务(service)、挂载点(mount)、设备(device)等。
要深入理解 systemctl 的工作原理,可以结合系统单元的配置文件来分析。systemctl 是非常强大的管理系统服务和进程的工具。

你可能感兴趣的:(linux,网络,linux,运维,infiniband)