Managing updates

Snaps update automatically, and by default, the snapd daemon checks for updates 4 times a day. Each update check is called a refresh.

But when, and how often, these updates occur can be modified with the snap command. Updates can be set to occur on Friday at midnight, for example, or for specific days of the month, such as only the third Monday, or even the last Friday of the month, between 23:00 to 01:00 the next day.

:information_source: Snaps running in devmode, or installed locally, are typically intended for testing and do not update automatically until they’ve been published and downloaded from the store.

Manually updating snaps

Regardless of when a refresh is scheduled, an update refresh can be initiated with the snap refresh command:

$ snap refresh
gnome-system-monitor 3.28.2 from 'canonical' refreshed
gnome-calculator 3.28.2 from 'canonical' refreshed

The refresh command can also be used to see when the last refresh occurred and when the next is scheduled:

$ snap refresh --time
timer: 00:00~24:00/4
last: today at 09:16 GMT
next: today at 17:39 GMT

The first line in the above output shows the value of the timer system option. This defines how and when a refresh should be scheduled.

Controlling updates

There are four system-wide options that manage how updates are handed:

  • refresh.timer: defines the refresh frequency and schedule
  • refresh.hold: delays the next refresh until the defined time and date
  • refresh.metered: pauses refresh updates when network connection is metered
  • refresh.retain: sets how many revisions of a snap are stored on the system

refresh.timer

Use refresh.timer to modify when, and how frequently, your snaps are refreshed.

The following example asks the system to only refresh snaps between 4.00am and 7.00am, and 7.00pm and 10:10pm:

$ sudo snap set system refresh.timer=4:00-7:00,19:00-22:10 

Other examples for the time and frequency option include:

Options Result
mon,10:00,,fri,15:00 Mondays at 10:00, Fridays at 15:10
mon,fri,10:00,15:00 Mondays at 10:00 and 15:00, Fridays at 10:00 and 15:00
mon-wed,fri,9:00-11:00/2 Monday to Wednesday and on Friday, twice between 9:00 and 11:10
mon,9:00~11:00,,wed,22:00~23:00 Mondays, some time between 9:00 and 11:00, and on Wednesdays, some time between 22:00 and 23:00
mon,wed Monday and on Wednesday, at 0:00
mon2-wed,23:00-24:00 2nd Monday of the month, through the following Wednesday, between 23:00 and 24:00
fri5,23:00-01:00 Last Friday of the month, from 23:00 to 1:00 the next day

See Timer string format for a comprehensive breakdown of the syntax used to define times and frequencies.

You can check the update frequency for your environment with the refresh command:

$ snap refresh --time
timer: 00:00~24:00/4
last: today at 07:47 BST
next: today at 12:13 BST

By default, the snap system is scheduled to refresh four times per day, as shown in the above output.

refresh.hold

Use refresh.hold to delay snap refreshes until a defined time and date. The time and date format needs to conform to RFC 3339.

For example, 5:22pm (BST), Tuesday 23rd April 2019, would look like the following:

2019-04-24T17:22:54+01:00

The correct format can be generated with the date command:

$ date --date="BST 2019-04-23 17:22:54" +%Y-%m-%dT%H:%M:%S%:z
2019-04-23T17:22:54+01:00

$ sudo snap set system refresh.hold="$(date --date=tomorrow +%Y-%m-%dT%H:%M:%S%:z)"
$ sudo snap get system refresh.hold
2019-04-24T17:22:54+01:00

After a refresh, the next refresh can be delayed by up to 60 days, after which a refresh will be performed regardless of the refresh.hold value.

:information_source: We explicitly format the date command output because the version of date provided by GNU core utilities breaks RFC3339 compatibility when passing the --rfc-3339 argument. See the bug report for further details.

refresh.metered

Use refresh.metered to pause and re-enable the refresh process when NetworkManager detects a metered connection, such as an LTE link with a limited data plan.

To hold refreshing snaps when on a metered connection:

$ sudo snap set system refresh.metered=hold

To allow refreshing:

$ sudo snap set system refresh.metered=null

By default, refresh is enabled when a metered connection is detected.

refresh.retain

Use refresh.retain to set the maximum number of a snap’s revisions stored by the system after the next refresh:

$ sudo snap set system refresh.retain=3

The refresh.retain value can be a number between 2 and 20. The default is refresh.retain=3 on Ubuntu Core systems and refresh.retain=2 on classic Ubuntu systems, such as those running Ubuntu 18.04 LTS (Bionic Beaver) and Ubuntu 16.04 LTS (Xenial Xerus).

Monitoring updates

Use the snap changes and snap change <num> commands are used to see details about what changed during the last refresh:

$ snap changes
ID    Status  Spawn                   Ready                   Summary
2052  Done    today at 09:34 BST      today at 09:35 BST      Auto-refresh 7 snaps
2053  Done    today at 15:16 BST      today at 15:17 BST      Refresh snaps "gnome-calculator", "flock-chat", "gnome-characters", "gnome-system-monitor"

And to see

$ snap change 2053
Status  Spawn               Ready               Summary
Done    today at 15:16 BST  today at 15:16 BST  Ensure prerequisites for "gnome-calculator" are available
Done    today at 15:16 BST  today at 15:16 BST  Download snap "gnome-calculator" (199) from channel "stable"
Done    today at 15:16 BST  today at 15:16 BST  Fetch and check assertions for snap "gnome-calculator" (199)
⋮
Done    today at 15:16 BST  today at 15:16 BST  Start snap "gnome-system-monitor" (54) services
Done    today at 15:16 BST  today at 15:16 BST  Clean up "gnome-system-monitor" (54) install
Done    today at 15:16 BST  today at 15:16 BST  Run configure hook of "gnome-system-monitor" snap if present

Last updated a month ago. Help improve this document in the forum.