为什么在spec文件中使用的%systemd_post在安装后没有启用或启动服务?

问题描述

我有一个非常简单的单元文件,它带有我打包到 RPM 文件的服务。这个 RPM 文件是在 Fedora 28 上构建和安装的。

我的服务文件再简单不过了:

[Unit]
Description=Hello Work

[Service]
ExecStart=/usr/bin/executable

[Install]
WantedBy=multi-user.target

在我的规范文件中,我添加了以下部分:

%post
%systemd_post %{name}.service

%preun
%systemd_preun %{name}.service

%postun
%systemd_postun_with_restart %{name}.service

服务文件通过

正确复制
mkdir -p %{buildroot}%{_unitdir}/
cp %{name}.service %{buildroot}%{_unitdir}/

%install 部分。

当我安装包时,服务没有启动。当我手动运行时

systemctl enable <service-name>

它有效。

我的安装没有启用和启动我的服务的错误在哪里?

解决方法

查看 documentation 时,它没有说 %systemd_post 启动您的服务。它们指的是 systemd.preset:您需要定义并打包一个 %{name}.preset 文件,该文件指定您的服务应默认启用。

这应该会启用您的软件包默认情况下。

我不完全确定现在您的包是否会启动默认情况下,但它看起来像 :)