diff --git a/deployment/docker/app.sh b/deployment/docker/app.sh
index ffc0d480d4961a3f347a04f58583873728e0774b..0136601a07231b1d3cb9e10d0d1adbbb7bfc7dd0 100755
--- a/deployment/docker/app.sh
+++ b/deployment/docker/app.sh
@@ -99,12 +99,12 @@ if [ "$1" == "shell" -o "$1" == "createsuperuser" -o "$1" == "test" ]; then
 fi
 
 if [ "$1" == "housekeeping" ]; then
-    while true; do
-        date
+    interval="${HOUSEKEEPING_SLEEP_SECONDS:-300}"
+    if [ "$interval" -gt 0 ]; then
+        python3 $APP_HOME/manage.py housekeeping --forever --forever-delay="$interval"
+    else
         python3 $APP_HOME/manage.py housekeeping
-        sleep "${HOUSEKEEPING_SLEEP_SECONDS:-300}"
-        echo
-    done
+    fi
 fi
 
 if [ "$1" == "build" ]; then
diff --git a/src/core/management/commands/housekeeping.py b/src/core/management/commands/housekeeping.py
index fddcc4e42b9e5473806335c82e3dd0c78fca25a6..6eb9106ed954662506dd8087d5f76298e27b26ce 100644
--- a/src/core/management/commands/housekeeping.py
+++ b/src/core/management/commands/housekeeping.py
@@ -1,6 +1,6 @@
 import time
 
-from django.core.management.base import BaseCommand
+from django.core.management.base import BaseCommand, CommandError
 from django.utils import timezone
 
 from ...models.messages import DirectMessage
@@ -63,6 +63,12 @@ class Command(BaseCommand):
     def handle(self, *args, **options):
         # call _do_housekeeping repeatedly (unless --forever is not set)
         forever = options.get('forever')
+        forever_delay = options.get('forever_delay', '0')
+        if forever:
+            if forever_delay <= 0:
+                raise CommandError('The --forever-delay value must a positive value (in seconds).')
+            print(f'Running housekeeping forever each {forever_delay}s:', end='\n\n')
+
         while True:
             if forever:
                 print(timezone.now().isoformat())
@@ -72,7 +78,7 @@ class Command(BaseCommand):
             if forever:
                 print()  # empty line
                 try:
-                    time.sleep(options.get('forever_delay'))
+                    time.sleep(forever_delay)
                 except KeyboardInterrupt:
                     print('Aborted.')
                     break