Ubuntu 22.04 无人值守升级:apt hook 用法,用于成功更新后执行命令

Ubuntu 22.04 无人值守升级:apt hook 用法,用于成功更新后执行命令

我查看了更新成功后执行的命令/etc/apt/apt.conf.d

# cat 15update-stamp
APT::Update::Post-Invoke-Success {"touch /var/lib/apt/periodic/update-success-stamp 2>/dev/null || true";};

因此我创建了一个包含以下内容的文件:

# cat 90rpi-firmware-purge
APT::Update::Post-Invoke-Success {"find /boot/firmware -type f -name '*.bak' -delete 2>/dev/null || true";};

但是,无人值守升级运行后,bak文件不会被删除。这让我相信实际命令没有成功执行。如果我以root用户身份手动运行该命令,文件将被删除。

我注意到一些文件使用了不同的钩子:

# cat 99needrestart
DPkg::Post-Invoke {"test -x /usr/lib/needrestart/apt-pinvoke && /usr/lib/needrestart/apt-pinvoke || true"; };

我正在尝试了解问题可能出在哪里。我还记得 Linux 要求在脚本中使用可执行文件的完整路径,/usr/bin/find而不是find。查看上面列出的命令,没有为可执行文件定义完整路径。

我没有在/var/log/unattended-upgrades/unattended-upgrades.log文件中看到任何错误,我应该在哪里查找可能的更新后执行错误?感谢您的帮助。

编辑:我想我明白了其中的区别,看评论时,DPkg::Post-Invoke当调用 dpkg 时,我们可能会有不同的更新,或者APT::Update::Post-Invoke-Success当 apt 缓存更新时:

# cat /etc/apt/apt.conf.d/20packagekit
// THIS FILE IS USED TO INFORM PACKAGEKIT
// THAT THE UPDATE-INFO MIGHT HAVE CHANGED

// Whenever dpkg is called we might have different updates
// i.e. if an user removes a package that had an update
DPkg::Post-Invoke {
"/usr/bin/test -e /usr/share/dbus-1/system-services/org.freedesktop.PackageKit.service && /usr/bin/test -S /var/run/dbus/system_bus_socket && /usr/bin/gdbus call --system --dest org.freedesktop.PackageKit --object-path /org/freedesktop/PackageKit --timeout 4 --method org.freedesktop.PackageKit.StateHasChanged cache-update > /dev/null; /bin/echo > /dev/null";
};

// When Apt's cache is updated (i.e. apt-cache update)
APT::Update::Post-Invoke-Success {
"/usr/bin/test -e /usr/share/dbus-1/system-services/org.freedesktop.PackageKit.service && /usr/bin/test -S /var/run/dbus/system_bus_socket && /usr/bin/gdbus call --system --dest org.freedesktop.PackageKit --object-path /org/freedesktop/PackageKit --timeout 4 --method org.freedesktop.PackageKit.StateHasChanged cache-update > /dev/null; /bin/echo > /dev/null";
};

相关内容