Service 为什么很少使用%pre rpm脚本?

Service 为什么很少使用%pre rpm脚本?,service,upgrade,rpm,Service,Upgrade,Rpm,在关于%pre-install脚本的一节中,它提到很少使用%pre脚本。事实上,它进一步指出(无论如何,当时)400多个RedHat软件包都没有使用%pre脚本 我认为%pre脚本是在当前安装版本之上安装文件之前停止现有服务的理想位置 我的想法错了吗?为什么RedHat在升级过程中没有在他们的任何服务包中使用%pre来实现此目的?好吧,我去做了我在提出这个问题之前应该做的研究。我从RedHat 7.1下载了几个服务包并运行: rpm -qp --scripts <package-name&

在关于%pre-install脚本的一节中,它提到很少使用%pre脚本。事实上,它进一步指出(无论如何,当时)400多个RedHat软件包都没有使用%pre脚本

我认为%pre脚本是在当前安装版本之上安装文件之前停止现有服务的理想位置


我的想法错了吗?为什么RedHat在升级过程中没有在他们的任何服务包中使用%pre来实现此目的?

好吧,我去做了我在提出这个问题之前应该做的研究。我从RedHat 7.1下载了几个服务包并运行:

rpm -qp --scripts <package-name>.rpm
rpm-qp--scripts.rpm
我发现1)不使用%pre不再是事实。即使在我检查过的少数几个服务中,有几个使用了%pre,2)大多数服务似乎只允许rpm在升级期间覆盖其数据文件和二进制文件,然后使用%poston(卸载后)脚本的升级部分重新启动(或尝试重新启动)服务


我会认为这相当不安全,因为当您在升级过程中(尤其是在升级过程中)写入数据文件时,旧的运行服务可能会混淆。在我看来,最终在%pre升级期间停止服务并在%postan升级期间再次启动服务更安全。。。但那只是我。

是的%pre比1997年编写“最大转速”时更常用。这并没有改变%pre应该“很少”使用的事实

原因是%pre阻止安装(并可能导致整个 如果需要安装时间依赖项,则事务将失败)

在%pre中停止服务并在%post中重新启动会打开一个更大的窗口 如果服务未运行,则只需在%post中重新启动服务

已经运行的服务通常读取其配置文件 仅在启动时(因此rpm可以在守护进程运行时替换文件)

运行的可执行文件在文件系统上有一个引用计数,等等 即使已删除/替换执行的文件,仍继续运行 用一个更新的软件包