redhat – 为什么RPM更新后停止服务
发布时间:2020-12-13 19:41:19 所属栏目:Linux 来源:网络整理
导读:我有一个软件包,我创建了一个RPM.因为IP原因,我无法将整个RPM粘贴到这里,但这里是问题的要点: %pre/sbin/pidof programif [ "$?" -eq "0" ]then /sbin/service program stopfi%post/sbin/chkconfig program on/sbin/service program start%preun/sbin/servi
我有一个软件包,我创建了一个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 每次我尝试升级包,它会停止程序服务,安装所有内容,启动服务,然后再次停止并删除文件夹…任何想法? 解决方法
这与脚本运行的顺序有关:
%pre of new package (package install) %post of new package %preun of old package (removal of old package) %postun of old package 所以在你的情况下,旧rpm的%preun最后运行,这会关闭服务. 这可以通过查看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 所以,你希望你的%postun脚本是这样的: %preun if [ "$1" = "0" ]; then /sbin/service program stop /sbin/chkconfig program off fi exit 0 这将使其仅在完全卸载(即rpm -e)时停止程序,并应为此执行. 注意:您也希望同时使用您的%postun脚本 注意:结束时的出口0;我喜欢专门提到那里,以防万一,因为最后一个命令的不良退出代码将继续并导致脚本退出与该状态,导致安装rpm的问题. 注意:将其固定在新的rpm中不会将其修复到当前安装的rpm中.你会想要用破碎的脚本rpm转动旧的rpm,你会很好的向前移动. 这只是涵盖了前/后脚本;具有触发器的更详细的版本可以是found here. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |