diff --git a/Puppetfile b/Puppetfile
--- a/Puppetfile
+++ b/Puppetfile
@@ -185,7 +185,7 @@
 
 mod 'systemd',
     :git => 'https://forge.softwareheritage.org/source/puppet-camptocamp-systemd',
-    :ref => '2.7.0'
+    :ref => '2.12.0'
 
 mod 'timezone',
     :git => 'https://forge.softwareheritage.org/source/puppet-saz-timezone',
diff --git a/site-modules/profile/manifests/swh/deploy/scheduler.pp b/site-modules/profile/manifests/swh/deploy/scheduler.pp
--- a/site-modules/profile/manifests/swh/deploy/scheduler.pp
+++ b/site-modules/profile/manifests/swh/deploy/scheduler.pp
@@ -91,6 +91,26 @@
     http_check_string => 'Software Heritage scheduler RPC server',
   }
 
+  # scheduler update metrics routine
+
+  # Template uses variables
+  #  - $user
+  #  - $group
+  #  - $config_file
+  #
+  $update_metrics_service_name = "swh-scheduler-update-metrics"
+  $update_metrics_unit_template = "profile/swh/deploy/scheduler/${update_metrics_service_name}.service.erb"
+  $update_metrics_timer_name = "${update_metrics_service_name}.timer"
+  $update_metrics_timer_template = "profile/swh/deploy/scheduler/${update_metrics_timer_name}.erb"
+
+  ::systemd::timer { $update_metrics_timer_name:
+    timer_content    => template($update_metrics_timer_template),
+    service_content  => template($update_metrics_unit_template),
+    active           => true,
+    enable           => true,
+    require          => Package[$packages],
+  }
+
   # task archival cron
 
   $archive_config_file = lookup('swh::deploy::scheduler::archive::conf_file')
@@ -121,5 +141,4 @@
       File[$archive_config_file],
     ],
   }
-
 }
diff --git a/site-modules/profile/templates/swh/deploy/scheduler/swh-scheduler-update-metrics.service.erb b/site-modules/profile/templates/swh/deploy/scheduler/swh-scheduler-update-metrics.service.erb
new file mode 100644
--- /dev/null
+++ b/site-modules/profile/templates/swh/deploy/scheduler/swh-scheduler-update-metrics.service.erb
@@ -0,0 +1,17 @@
+# Scheduler Update Metrics unit file
+# Managed by puppet class profile::swh::deploy::scheduler
+# Changes will be overwritten
+
+[Unit]
+Description=Software Heritage scheduler update-metrics
+Requires=network.target
+After=network.target
+
+[Service]
+User=<%= @user %>
+Group=<%= @group %>
+Type=simple
+ExecStart=/usr/bin/swh scheduler --config-file <%= @config_file %> origin update-metrics
+
+[Install]
+WantedBy=multi-user.target
diff --git a/site-modules/profile/templates/swh/deploy/scheduler/swh-scheduler-update-metrics.timer.erb b/site-modules/profile/templates/swh/deploy/scheduler/swh-scheduler-update-metrics.timer.erb
new file mode 100644
--- /dev/null
+++ b/site-modules/profile/templates/swh/deploy/scheduler/swh-scheduler-update-metrics.timer.erb
@@ -0,0 +1,9 @@
+[Install]
+WantedBy=timers.target
+
+[Timer]
+OnCalendar=daily
+Unit=swh-scheduler-update-metrics.service
+
+[Unit]
+Description=regular scheduler update-metrics refresh