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.