Ubuntu 无人值守升级与 google 云计算引擎上的启动脚本冲突

Ubuntu unattended upgrades conflict with startup script on google cloud compute engine

使用 GCP Ubuntu 18.04 图像,普通图像。

我在 vm 上使用启动脚本来自动部署功能和更改基本映像。我有一个以以下内容开头的:

#! /bin/bash
add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran35/'
apt update
apt -y upgrade
export DEBIAN_FRONTEND=noninteractive
apt -y install libpam-dev libpam-ldap r-base

不幸的是,在一些有一段时间没有 运行 的机器上,我收到以下错误: 来自 /var/log/syslog :

startup-script: INFO startup-script: dpkg: error: dpkg frontend is locked by another process

根据我的调查,我可以看到进程 unattended upgrades 正在锁定文件,因为它正在对系统进行自动安全更新。如果我让自动升级完成并手动启动脚本,一切运行正常。

有没有办法延迟启动脚本的执行,使其在无人值守升级完成后启动?我的意思是,比简单的等待命令更可靠的东西。

根据 GCP 文档,启动脚本是通过 vm 的元数据配置的。

非常感谢,祝你今天愉快。

您可以让您的脚本等到 dpkg 锁不再持有。 This AskUbuntu answer 建议使用 fuser 的解决方案来查看锁定文件是否被另一个进程使用:

#!/bin/bash

while fuser /var/lib/dpkg/lock >& /dev/null; do
  echo "waiting for other package installs to complete..."
  sleep 1
done

add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran35/'
apt update
apt -y upgrade
export DEBIAN_FRONTEND=noninteractive
apt -y install libpam-dev libpam-ldap r-base