服务文件存在但systemd找不到

Pat*_*ker 10 linux systemd

我创建了一个 systemd 服务文件并将其放在/etc/systemd/system/anfragen-3dkonfig-mapper.service. 我跑了systemctl daemon-reloadsystemctl daemon-reexec然后重新启动了系统。

  • systemctl enable anfragen-3dkonfig-mapper 结果是

    Failed to enable unit: Unit file anfragen-3dkonfig-mapper.service does not exist.
    
    Run Code Online (Sandbox Code Playgroud)
  • systemctl start anfragen-3dkonfig-mapper 结果是

    Failed to start anfragen-3dkonfig-mapper.service: Unit anfragen-3dkonfig-mapper.service not found.
    
    Run Code Online (Sandbox Code Playgroud)
  • ls -lh /etc/systemd/system/anfragen-3dkonfig-mapper.service 产出

    -rw-r--r--. 1 root root 440 Mar 19 12:08 /etc/systemd/system/anfragen-3dkonfig-mapper.service
    
    Run Code Online (Sandbox Code Playgroud)
  • cd /root && systemd-analyze verify anfragen-3dkonfig-mapper.service 退出代码为 0 并且不打印输出。

  • mount 显示

    /dev/sda2 on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
    
    Run Code Online (Sandbox Code Playgroud)
  • 没有其他坐骑接触/usr/etc

  • 服务文件的内容是:

    [Unit]
    Description=Anfragen 3D Konfigurations Mapper Service
    After=network.target
    
    [Service]
    Restart=always
    ExecStartPre=-/usr/bin/podman stop anfragen-3dkonfig-mapper
    ExecStartPre=-/usr/bin/podman rm anfragen-3dkonfig-mapper
    ExecStart=/usr/bin/podman run --rm --name anfragen-3dkonfig-mapper-app -p 10010:10000 anfragen-3dkonfig-mapper-app:0.0.1
    ExecStop=/usr/bin/podman stop anfragen-3dkonfig-mapper
    
    [Install]
    WantedBy=multi-user.target
    
    Run Code Online (Sandbox Code Playgroud)
  • 以上所有命令均以root用户身份运行。

  • 操作系统:CentOS Linux 8.0.1905 版(核心)
  • 系统版本:239
  • Linux内核: Linux version 4.18.0-80.11.2.el8_0.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 8.2.1 20180905 (Red Hat 8.2.1-3) (GCC))
  • 我依稀记得几个月前另一个服务文件也有类似的问题,它在经过几个小时的反复检查和来回重命名服务文件后神奇地开始工作。

我对两件事感兴趣:

  • 如何调试这样的问题?
  • 怎么了?

Pat*_*ker 9

正如@JdeBP 所暗示的,错误的 SELinux 文件标签是导致这种行为的原因。.输出中的字符ls表示为该文件设置了安全上下文。所以要细心到.ls输出!

cd /etc/systemd/system && ls -lhZ some-other-service.service anfragen-3dkonfig-mapper.service 印刷

-rw-r--r--. 1 root root unconfined_u:object_r:admin_home_t:s0        440 Mar 19 12:08 anfragen-3dkonfig-mapper.service
-rw-r--r--. 1 root root unconfined_u:object_r:systemd_unit_file_t:s0 457 Feb 24 11:42 some-other-service.service
Run Code Online (Sandbox Code Playgroud)

可以看出,另一个服务文件有systemd_unit_file_t标签,而损坏的服务没有。这可以通过restorecon anfragen-3dkonfig-mapper.service. 在此之后,标签如下所示:

-rw-r--r--. 1 root root unconfined_u:object_r:systemd_unit_file_t:s0 440 Mar 19 12:08 anfragen-3dkonfig-mapper.service
-rw-r--r--. 1 root root unconfined_u:object_r:systemd_unit_file_t:s0 457 Feb 24 11:42 some-other-service.service
Run Code Online (Sandbox Code Playgroud)

systemd 现在按预期运行。