我有一个软件包,我为其创建了一个RPM.由于IP原因,我无法粘贴整个RPM,但这里是问题的要点:
%pre
/sbin/pidof program
if [ "$?" -eq "0" ]
then
/sbin/service program stop
fi
%post
/sbin/chkconfig program on
/sbin/service program start
%preun
/sbin/service program stop
/sbin/chkconfig program off
%postun
rm -rf /program_folder
Run Code Online (Sandbox Code Playgroud)
每次我尝试升级包时,它会停止程序服务,安装所有内容,启动服务,然后再次停止它并删除文件夹......任何想法?
Cor*_*son 26
这与脚本运行的顺序有关:
%pre of new package
(package install)
%post of new package
%preun of old package
(removal of old package)
%postun of old package
Run Code Online (Sandbox Code Playgroud)
因此,在您的情况下,%preun旧rpm的最后一次运行会关闭服务.
这可以通过查看post脚本的参数来解决.这是一个值的表:
install upgrade uninstall
%pre $1 == 1 $1 == 2 (N/A)
%post $1 == 1 $1 == 2 (N/A)
%preun (N/A) $1 == 1 $1 == 0
%postun (N/A) $1 == 1 $1 == 0
Run Code Online (Sandbox Code Playgroud)
所以,你希望你的%postun脚本改为:
%preun
if [ "$1" = "0" ]; then
/sbin/service program stop
/sbin/chkconfig program off
fi
exit 0
Run Code Online (Sandbox Code Playgroud)
这将使它仅在完全卸载(即; rpm -e)时停止程序,并且应该为您完成.
注意:您也希望对%postun脚本执行相同的操作
注意:exit 0最后; 我想特意把它放在以防万一,因为最后一个命令的错误退出代码将继续并导致脚本以该状态退出,导致rpm安装出现问题.
注意:在新rpm中修复此问题并未将其修复为当前安装的rpm.你会想要rpm -e用破旧的脚本来保存旧的rpm,你会很好地向前发展.
这只包括前/后脚本; 有触发器的更详细版本可以在这里找到.