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