dpkg/apt-get 更新包 – 停机时间?

dpkg/apt-get 更新包 – 停机时间?

我想知道 apt-get/dpkg 包(.deb)在更新时是否会管理停机时间?

例如,当nginx通过 更新(假设它已经安装)时sudo apt-get install nginx,在我看来没有任何停机时间。

如果是真的,我想将这种能力转移到通过 deb 文件部署 PHP 应用程序。我通常会进行 Capistrano 风格的部署(构建网站,将其放到 Web 服务器上,然后通过符号链接将旧代码与新代码交换)。

如果我使用 .deb 包安装我构建的应用程序,我是否也应该使用符号链接策略来最大限度地减少停机时间,或者是否以已经最大限度地减少停机时间的方式安装/更新包?

假设.deb 包只是替换代码文件,然后调用安装后脚本来重新加载应用程序网关(php-fpm、gunicorn、unicorn、phusion,无论应用程序网关是什么)。

答案1

Debian 软件包不会专门“管理”停机时间。一般来说,软件包会:

  • 在解压新版本的软件包之前停止该服务,然后在解压后重新启动它;或者
  • 在新版本的包解压后触发停止/启动(或重新启动)循环。

他们选择哪一个取决于很多因素,包括软件包维护者脚本的编写或审查时间有多久了,软件包是否提供了其他辅助文件(如果旧版本的程序读取较新的文件,会产生不稳定的情况(动态加载模块、更改的文件格式等等),以及软件包维护者是否知道他们在做什么。

不过,所有这些都与你的情况无关,因为你是编写维护者脚本的人,因为这是您的软件包,所以您可以按照自己认为合适的方式进行操作。但是,没有任何策略涉及重新启动服务(而不是触发某种优雅的重新加载),这不会有一段时间服务不可用。在这种情况下,正确的解决方案是提供某种冗余,无论是两台独立的机器(您一次更新一台),还是在一台机器上运行该服务的两个独立副本(同样,您一次更新一台)。

相关内容