AFAIK apt 没有特定于包的钩子(即,当给定的包被修改时,无法告诉它运行命令)。它所具有的是DPkg::Pre-Install-Pkgs
:
Pre-Install-Pkgs
This is a list of shell commands to run before invoking dpkg(1).
Like options this must be specified in list notation. The commands
are invoked in order using /bin/sh; should any fail APT will abort.
Run Code Online (Sandbox Code Playgroud)
请注意,这是在运行之前对包完成任何操作的。
您可以为通过 stdin 传递给命令的信息指定一个版本;信息水平随着版本的增加而增加:
版本 2 另外转储
VERSION 2
作为第一行,然后对于每个包裹,
VERSION 3
作为第一行)对于一个简单的情况,你可以有一个像 (in, say /usr/local/bin/restart-foo
)这样的脚本:
Pre-Install-Pkgs
This is a list of shell commands to run before invoking dpkg(1).
Like options this must be specified in list notation. The commands
are invoked in order using /bin/sh; should any fail APT will abort.
Run Code Online (Sandbox Code Playgroud)
和 apt 配置/etc/apt/apt.conf.d/99-foo-hook
:
DPkg::Pre-Install-Pkgs {"/usr/local/bin/restart-foo";};
DPkg::Tools::Options::/usr/local/bin/restart-foo::Version "1";
Run Code Online (Sandbox Code Playgroud)
对于更复杂的情况,您可以通过设置DPkg::Tools::Options::/usr/local/bin/restart-foo::Version
为"2"
or来请求更多信息并解析它"3"
,如下所示:
#! /bin/bash
if grep -q my-package
then
# schedule an at job to restart it
at now + 30 min <<<"service restart foo"
fi
Run Code Online (Sandbox Code Playgroud)
当然,不是echo
ing 数据,而是使用它来决定要做什么。
提供的输入示例:
V1:
/var/cache/apt/archives/tcsh_6.18.01-5_amd64.deb
Run Code Online (Sandbox Code Playgroud)
V2:
VERSION 2
APT::Architecture=amd64
APT::Build-Essential::=build-essential
APT::Install-Recommends=true
[...]
DPkg::Progress-Fancy=1
Binary=apt
CommandLine::AsString=apt%20install%20--reinstall%20tcsh
tcsh - < 6.18.01-5 /var/cache/apt/archives/tcsh_6.18.01-5_amd64.deb
tcsh - < 6.18.01-5 **CONFIGURE**
Run Code Online (Sandbox Code Playgroud)
版本 3:
VERSION 3
APT::Architecture=amd64
APT::Build-Essential::=build-essential
APT::Install-Recommends=true
[...]
DPkg::Progress-Fancy=1
Binary=apt
CommandLine::AsString=apt%20install%20--reinstall%20tcsh
tcsh 6.18.01-5 amd64 none = 6.18.01-5 amd64 none /var/cache/apt/archives/tcsh_6.18.01-5_amd64.deb
tcsh 6.18.01-5 amd64 none = 6.18.01-5 amd64 none **CONFIGURE**
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用 dpkg 触发器。但是,为此,您需要创建一个包,该包为您要观看的包中的某些内容安装触发器,但触发器在配置包后执行,因此这对重新启动服务更好。这个Stack Overflow 帖子有一个很好的指南。