我在升级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 "命令也不能用。
如果有任何关于这个问题的建议,非常感激,谢谢。
有几个问题。
sudo
因为1)它可能没有被安装 2)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
.
将服务启动命令放在脚本小程序"%posttrans "中,解决了我的问题,谢谢大家的建议。