diff --git a/sidekiq_cluster/cli.rb b/sidekiq_cluster/cli.rb
index 59f39003429edc968c09716325e5fa44bdffbb6c..c0940370d3b0c16fc614535132c93365dc4ca813 100644
--- a/sidekiq_cluster/cli.rb
+++ b/sidekiq_cluster/cli.rb
@@ -100,6 +100,11 @@ def run(argv = ARGV)
 
         unless @dryrun
           @logger.info("Starting cluster with #{queue_groups.length} processes")
+
+          # Make sure we reset the metrics directory prior to:
+          # - starting a metrics server process
+          # - starting new workers
+          ::Prometheus::CleanupMultiprocDirService.new(@metrics_dir).execute
         end
 
         start_and_supervise_workers(queue_groups)
@@ -118,11 +123,6 @@ def start_and_supervise_workers(queue_groups)
 
         return if @dryrun
 
-        # Make sure we reset the metrics directory prior to:
-        # - starting a metrics server process
-        # - starting new workers
-        ::Prometheus::CleanupMultiprocDirService.new(@metrics_dir).execute
-
         ProcessManagement.write_pid(@pid) if @pid
 
         supervisor = SidekiqProcessSupervisor.instance(
diff --git a/spec/commands/sidekiq_cluster/cli_spec.rb b/spec/commands/sidekiq_cluster/cli_spec.rb
index e2fc907fd05df64b957dac0f5e10c9ccebda5dc7..bbf5f2bc4d99e134b84e3e0e18913ba7f9768f60 100644
--- a/spec/commands/sidekiq_cluster/cli_spec.rb
+++ b/spec/commands/sidekiq_cluster/cli_spec.rb
@@ -303,8 +303,9 @@
             allow(Gitlab::SidekiqCluster).to receive(:start).and_return([])
           end
 
-          it 'wipes the metrics directory' do
-            expect(metrics_cleanup_service).to receive(:execute)
+          it 'wipes the metrics directory before starting workers' do
+            expect(metrics_cleanup_service).to receive(:execute).ordered
+            expect(Gitlab::SidekiqCluster).to receive(:start).ordered.and_return([])
 
             cli.run(%w(foo))
           end