You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过RPM在RedHat8部署systemd服务报错求助:Unit文件不存在

问题原因

你遇到的错误核心原因是:%pre脚本是在RPM包的文件安装到系统之前执行的,这时候toto.service还没被复制到/etc/systemd/system目录,systemctl自然找不到这个单元文件,所以报错。

修正后的.spec文件
%define install_dir        /etc/systemd/system
%define service            toto.service

# ----------------------------------------------------------
%install
# ----------------------------------------------------------
mkdir -p %{buildroot}/%{install_dir}
cp %{service} %{buildroot}/%{install_dir}
# 修正服务文件权限,systemd服务文件默认不需要执行权限
chmod 0644 %{buildroot}/%{install_dir}/%{service}

# ----------------------------------------------------------
%files
# ----------------------------------------------------------
# 采用更合理的权限设置,systemd服务文件通常为0644
%defattr(0644,root,root,0644)
%{install_dir}/%{service}

# ----------------------------------------------------------
%pre
# ----------------------------------------------------------
echo "Installing %{summary} (%{version}-%{release})..."

# ----------------------------------------------------------
%post
# ----------------------------------------------------------
# 文件已安装完成,现在处理服务启用
echo "Enabling and starting %{service}..."
# 重新加载systemd配置,识别新的服务文件
systemctl daemon-reload
# 启用并启动服务
systemctl enable %{service} --now

# ----------------------------------------------------------
%postun
# ----------------------------------------------------------
echo "Uninstalling %{summary} (%{version}-%{release})..."

# 仅在完全卸载(不是升级)时执行
if [ $1 -eq 0 ] ; then
    # 停止并禁用服务
    systemctl disable --now %{service}
    # 重新加载systemd配置,移除已删除的服务文件信息
    systemctl daemon-reload
fi
关键修改说明
  • 移走%pre里的service操作:把服务启用逻辑放到%post脚本,这个阶段包内文件已经全部安装到系统对应目录,systemctl能找到toto.service。
  • 添加systemctl daemon-reload:新安装或删除服务文件后,必须让systemd重新加载配置,否则它无法识别新的服务单元。
  • 修正服务文件权限:systemd服务文件不需要执行权限,设置为0644是标准做法,避免权限过大导致的安全问题。
  • 移除%postun里的rm命令:RPM会自动管理包内安装的文件,手动删除会导致RPM数据库和实际系统文件不一致,后续操作可能出问题。

内容的提问来源于stack exchange,提问作者YoYo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 23:05:12