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-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-get, system updates can fail. When the lock condition is encountered,
apt will typically return code
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.