This article is outdated and may not work correctly for current operating systems or software.
Ubuntu 16 and newer performs periodic tasks related to apt (such as updating the package list, and applying unattended upgrades) using a systemd timer. This timer is usually triggered at the start of launching an Ubuntu 16 VPS, which can cause apt tools (apt
, apt-get
) to fail with an error similar to the following:
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
A common use case of Vultr startup scripts is to update the system packages. Without checking the error codes returned from apt
or apt-get
, system updates can fail. When the lock condition is encountered, apt
will typically return code 100
.
This sample script can be used as a Vultr startup script to retry installing system updates. You can modify it to fit your needs.
#!/bin/bash
UPGRADE_ATTEMPT_COUNT=100
UPGRADE_STATE=1
for i in `seq 1 $UPGRADE_ATTEMPT_COUNT`;
do
if [ "$UPGRADE_STATE" -eq "1" ]; then
apt-get -y update
if [ "`echo $?`" -eq "0" ]; then
echo "package list updated."
UPGRADE_STATE=2;
fi
fi
if [ "$UPGRADE_STATE" -eq "2" ]; then
apt-get -y upgrade
if [ "`echo $?`" -eq "0" ]; then
echo "packages updated."
UPGRADE_STATE=3;
fi
fi
if [ "$UPGRADE_STATE" -eq "3" ]; then
break
fi
sleep 5
done
if [ "$UPGRADE_STATE" -ne "3" ]; then
echo "ERROR: packages failed to update after $UPGRADE_ATTEMPT_COUNT attempts."
fi
More information about Automatic Updates is available in the Ubuntu LTS documentation.