在SPEC文件中,systemctl启动服务不工作。

问题描述 投票:0回答:1

我在升级RPM包的时候,遇到了SPEC文件中的 "sudo systemctl start xxx.service "命令无法使用的问题,以下是我在SPEC文件中的%post脚本。

%post
echo "---------------------------- post $1 -------------------------------"
# refresh installation
if [ $1 == 1 ]; then
  sudo echo "Installation finished."
# upgrade installation
elif [ $1 -gt 1 ]; then
  sudo echo "Starting service xxx.service..."
  sudo /usr/bin/systemctl enable xxx.service > /dev/null 2>&1
  sudo /usr/bin/systemctl start xxx.service
  sleep 10
  sudo echo "Finished."
fi
exit 0

我确定服务文件已经存在于目录usrlibsystemdsystem中,我可以用 "sudo systemctl start xxx.service "命令手动启动它。

而且我发现 "sleep 10 "命令也不能用。

如果有任何关于这个问题的建议,非常感激,谢谢。

rhel rpm-spec systemctl
1个回答
2
投票

有几个问题。

  • 你不应该使用 sudo 因为1)它可能没有被安装 2)rpm安装反正是以超级用户的身份运行的
  • 你应该使用标准的 SystemD的RPM宏 而不是重新发明轮子。

本质上这只是简单的归结为。

%{?systemd_requires}
BuildRequires: systemd

# ...

%post
%systemd_post %{name}.service

%preun
%systemd_preun %{name}.service

%postun
%systemd_postun_with_restart %{name}.service

# ...

注意CentOSRHEL的SystemD宏是在... systemd 包,而在Fedora中,它们现在是在 systemd-rpm-macros.


0
投票

将服务启动命令放在脚本小程序"%posttrans "中,解决了我的问题,谢谢大家的建议。

© www.soinside.com 2019 - 2024. All rights reserved.