diff --git a/lib/pleroma/workers/attachments_cleanup_worker.ex b/lib/pleroma/workers/attachments_cleanup_worker.ex
index 0a397eae01db2993fbb41dc2e50c6e78390007ac..4c17640537b8f1641359f560f5ad692dd7103da0 100644
--- a/lib/pleroma/workers/attachments_cleanup_worker.ex
+++ b/lib/pleroma/workers/attachments_cleanup_worker.ex
@@ -31,6 +31,9 @@ def perform(%Job{
 
   def perform(%Job{args: %{"op" => "cleanup_attachments", "object" => _object}}), do: {:ok, :skip}
 
+  @impl Oban.Worker
+  def timeout(_job), do: :timer.seconds(900)
+
   defp do_clean({object_ids, attachment_urls}) do
     uploader = Pleroma.Config.get([Pleroma.Upload, :uploader])
 
diff --git a/lib/pleroma/workers/background_worker.ex b/lib/pleroma/workers/background_worker.ex
index 91440cbe6a0e2b3bc32be73a6c90533141c8fa32..3805293bc351f91e80e042bac8c730e6f3a9cbb2 100644
--- a/lib/pleroma/workers/background_worker.ex
+++ b/lib/pleroma/workers/background_worker.ex
@@ -43,4 +43,7 @@ def perform(%Job{
   def perform(%Job{args: %{"op" => "delete_instance", "host" => host}}) do
     Instance.perform(:delete_instance, host)
   end
+
+  @impl Oban.Worker
+  def timeout(_job), do: :timer.seconds(5)
 end
diff --git a/lib/pleroma/workers/backup_worker.ex b/lib/pleroma/workers/backup_worker.ex
index 7657fa9ce4a0fdd8059fdbedb63b487a522488d3..12ee70f00b7c57adf6acbb5726ed16b6810900b3 100644
--- a/lib/pleroma/workers/backup_worker.ex
+++ b/lib/pleroma/workers/backup_worker.ex
@@ -30,6 +30,7 @@ def delete(backup) do
     |> Oban.insert()
   end
 
+  @impl Oban.Worker
   def perform(%Job{
         args: %{"op" => "process", "backup_id" => backup_id, "admin_user_id" => admin_user_id}
       }) do
@@ -49,6 +50,9 @@ def perform(%Job{args: %{"op" => "delete", "backup_id" => backup_id}}) do
     end
   end
 
+  @impl Oban.Worker
+  def timeout(_job), do: :timer.seconds(900)
+
   defp has_email?(user) do
     not is_nil(user.email) and user.email != ""
   end
diff --git a/lib/pleroma/workers/mailer_worker.ex b/lib/pleroma/workers/mailer_worker.ex
index 81764ba72b289f6cc0732ca810651bd92fe6385c..940716558fe6fec9ae0a7d61706d9fcfc90e4f9d 100644
--- a/lib/pleroma/workers/mailer_worker.ex
+++ b/lib/pleroma/workers/mailer_worker.ex
@@ -12,4 +12,7 @@ def perform(%Job{args: %{"op" => "email", "encoded_email" => encoded_email, "con
     |> :erlang.binary_to_term()
     |> Pleroma.Emails.Mailer.deliver(config)
   end
+
+  @impl Oban.Worker
+  def timeout(_job), do: :timer.seconds(5)
 end
diff --git a/lib/pleroma/workers/mute_expire_worker.ex b/lib/pleroma/workers/mute_expire_worker.ex
index a7841d917b861ed8afa5cb47f4714c0302563665..8ce458d488212c05654c10c0c2e353eb2fb3d041 100644
--- a/lib/pleroma/workers/mute_expire_worker.ex
+++ b/lib/pleroma/workers/mute_expire_worker.ex
@@ -17,4 +17,7 @@ def perform(%Job{
     Pleroma.Web.CommonAPI.remove_mute(user_id, activity_id)
     :ok
   end
+
+  @impl Oban.Worker
+  def timeout(_job), do: :timer.seconds(5)
 end
diff --git a/lib/pleroma/workers/poll_worker.ex b/lib/pleroma/workers/poll_worker.ex
index 4c7eab5c10216985748ebb60e5304d1e029abf29..022d026f870cecfe3e88f47365dbec53356824c6 100644
--- a/lib/pleroma/workers/poll_worker.ex
+++ b/lib/pleroma/workers/poll_worker.ex
@@ -19,6 +19,9 @@ def perform(%Job{args: %{"op" => "poll_end", "activity_id" => activity_id}}) do
     end
   end
 
+  @impl Oban.Worker
+  def timeout(_job), do: :timer.seconds(5)
+
   defp find_poll_activity(activity_id) do
     with nil <- Activity.get_by_id(activity_id) do
       {:error, :poll_activity_not_found}
diff --git a/lib/pleroma/workers/publisher_worker.ex b/lib/pleroma/workers/publisher_worker.ex
index 528a06bb390e8f600591f1aeeca678afec23f541..598ae377951b4c8fe544ccd06cf720d472f88c4e 100644
--- a/lib/pleroma/workers/publisher_worker.ex
+++ b/lib/pleroma/workers/publisher_worker.ex
@@ -22,4 +22,7 @@ def perform(%Job{args: %{"op" => "publish_one", "module" => module_name, "params
     params = Map.new(params, fn {k, v} -> {String.to_atom(k), v} end)
     Federator.perform(:publish_one, String.to_atom(module_name), params)
   end
+
+  @impl Oban.Worker
+  def timeout(_job), do: :timer.seconds(10)
 end
diff --git a/lib/pleroma/workers/purge_expired_activity.ex b/lib/pleroma/workers/purge_expired_activity.ex
index 0545d3eced3d54e4fc8cc88d85de78c2d1986eaf..e554684feb3b2db6dc546a9c9211f1281f45914f 100644
--- a/lib/pleroma/workers/purge_expired_activity.ex
+++ b/lib/pleroma/workers/purge_expired_activity.ex
@@ -35,6 +35,9 @@ def perform(%Oban.Job{args: %{"activity_id" => id}}) do
     end
   end
 
+  @impl Oban.Worker
+  def timeout(_job), do: :timer.seconds(5)
+
   defp enabled? do
     with false <- Pleroma.Config.get([__MODULE__, :enabled], false) do
       {:error, :expired_activities_disabled}
diff --git a/lib/pleroma/workers/purge_expired_filter.ex b/lib/pleroma/workers/purge_expired_filter.ex
index 933ecb3f66008b33245005530b43e67b1561b37c..9114aeb7f4a609f46a25cddaee93275c64122a73 100644
--- a/lib/pleroma/workers/purge_expired_filter.ex
+++ b/lib/pleroma/workers/purge_expired_filter.ex
@@ -31,6 +31,9 @@ def perform(%Job{args: %{"filter_id" => id}}) do
     |> Repo.delete()
   end
 
+  @impl Oban.Worker
+  def timeout(_job), do: :timer.seconds(5)
+
   @spec get_expiration(pos_integer()) :: Job.t() | nil
   def get_expiration(id) do
     from(j in Job,
diff --git a/lib/pleroma/workers/purge_expired_token.ex b/lib/pleroma/workers/purge_expired_token.ex
index 1d322b6b67315c568c1a869b715c4092f78107ae..2ccd9e80b9a95077564ce82fbec0bd56cf62683c 100644
--- a/lib/pleroma/workers/purge_expired_token.ex
+++ b/lib/pleroma/workers/purge_expired_token.ex
@@ -26,4 +26,7 @@ def perform(%Oban.Job{args: %{"token_id" => id, "mod" => module}}) do
     |> Pleroma.Repo.get(id)
     |> Pleroma.Repo.delete()
   end
+
+  @impl Oban.Worker
+  def timeout(_job), do: :timer.seconds(5)
 end
diff --git a/lib/pleroma/workers/receiver_worker.ex b/lib/pleroma/workers/receiver_worker.ex
index c41b44e1419ac1f6bc0ec15cf1657613f9a04b7b..4f513b907481ee86c14ef5fa6552aa32a0eedc31 100644
--- a/lib/pleroma/workers/receiver_worker.ex
+++ b/lib/pleroma/workers/receiver_worker.ex
@@ -17,4 +17,7 @@ def perform(%Job{args: %{"op" => "incoming_ap_doc", "params" => params}}) do
       e -> e
     end
   end
+
+  @impl Oban.Worker
+  def timeout(_job), do: :timer.seconds(5)
 end
diff --git a/lib/pleroma/workers/remote_fetcher_worker.ex b/lib/pleroma/workers/remote_fetcher_worker.ex
index c3158bbbe2b08a50180271e95facf932cc9daa27..d2a77aa17f5cc7b2245bd005bd6deb75f8b1a26d 100644
--- a/lib/pleroma/workers/remote_fetcher_worker.ex
+++ b/lib/pleroma/workers/remote_fetcher_worker.ex
@@ -11,4 +11,7 @@ defmodule Pleroma.Workers.RemoteFetcherWorker do
   def perform(%Job{args: %{"op" => "fetch_remote", "id" => id} = args}) do
     {:ok, _object} = Fetcher.fetch_object_from_id(id, depth: args["depth"])
   end
+
+  @impl Oban.Worker
+  def timeout(_job), do: :timer.seconds(10)
 end
diff --git a/lib/pleroma/workers/scheduled_activity_worker.ex b/lib/pleroma/workers/scheduled_activity_worker.ex
index 9a17330b6041f53356d5e7fcaf05122bc47bbf53..4df84d00f9387fd9c7338e1f2d60f456c649c2b0 100644
--- a/lib/pleroma/workers/scheduled_activity_worker.ex
+++ b/lib/pleroma/workers/scheduled_activity_worker.ex
@@ -37,6 +37,9 @@ def perform(%Job{args: %{"activity_id" => activity_id}}) do
     end
   end
 
+  @impl Oban.Worker
+  def timeout(_job), do: :timer.seconds(5)
+
   defp find_scheduled_activity(id) do
     with nil <- Repo.get(ScheduledActivity, id) do
       {:error, :scheduled_activity_not_found}
diff --git a/lib/pleroma/workers/transmogrifier_worker.ex b/lib/pleroma/workers/transmogrifier_worker.ex
index ed319c585f5aa1499161b7b5919c99866da1d11f..1f3f5385ec9074a85811cf6b781fb10590ba8006 100644
--- a/lib/pleroma/workers/transmogrifier_worker.ex
+++ b/lib/pleroma/workers/transmogrifier_worker.ex
@@ -12,4 +12,7 @@ def perform(%Job{args: %{"op" => "user_upgrade", "user_id" => user_id}}) do
     user = User.get_cached_by_id(user_id)
     Pleroma.Web.ActivityPub.Transmogrifier.perform(:user_upgrade, user)
   end
+
+  @impl Oban.Worker
+  def timeout(_job), do: :timer.seconds(5)
 end
diff --git a/lib/pleroma/workers/web_pusher_worker.ex b/lib/pleroma/workers/web_pusher_worker.ex
index 6447a5edc6ec41cb3fb3cb87f9db1d8cde02f8a9..67e84b0c9dbdb64f1fdedbab2afe64d921f40641 100644
--- a/lib/pleroma/workers/web_pusher_worker.ex
+++ b/lib/pleroma/workers/web_pusher_worker.ex
@@ -17,4 +17,7 @@ def perform(%Job{args: %{"op" => "web_push", "notification_id" => notification_i
 
     Pleroma.Web.Push.Impl.perform(notification)
   end
+
+  @impl Oban.Worker
+  def timeout(_job), do: :timer.seconds(5)
 end