У меня есть докер-контейнер, который запускает простой пользовательский сервер загрузки с использованием uwsgi
в Debian и скрипт Python.Файлы создаются и сохраняются внутри контейнера для каждого запроса.Теперь периодически я хочу удалять старые файлы, сгенерированные сервером для прошлых запросов.
До сих пор я добивался очистки с помощью cronjob на хосте , который выглядит примерно так:
*/30 * * * * docker exec mycontainer /path/on/container/delete_old_files.sh
Но у этого есть несколько недостатков:
- Cron должен быть установлен и запущен на хосте докера
- Пользователь должен вручную добавить cronjob длякаждый контейнер, который они запускают
- В исходном коде есть дополнительный скрипт очистки
- Необходимость задания cron должна быть задокументирована
Я бы предпочелрешение, которое разворачивается с док-контейнером, а также подходит для более общих периодических задач на фоне док-контейнера.
Есть ли лучшие практики по этому поводу?
Есть ли в python или uwsgi простой механизм для периодических фоновых задач?
Я знаю, что мог бы установить cron внутри контейнера и что-то вроде: CMD ['sh', '-c', 'cron; uswgi <uswgi-options>... --wsgi-file server.py']
, но это кажетсянемного клонит и против философии докера.
Решение, подобное этому в server.py
:
def cleanup():
# ...
threading.Timer(30*60, cleanup).start() # seconds...
cleanup()
# ... rest of the code here ...
Кажется хорошим, но я не уверен, как оно мешает собственному uwsgi
многопоточность и обработка.
Вроде бы простая проблема, но это не так.