我查看了更新成功后执行的命令/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";
};