Я хотел бы использовать задачу cron
для удаления media files
, если условие истинно.
Пользователи создают файлы экспорта, хранящиеся в папке «Медиа».Чтобы очистить файлы экспорта в фоновом режиме, у меня есть задача Cron, которая зацикливается на каждом файле и проверяет, пройдена ли задержка окончания срока действия.
Я использовал django-cron
library
Пример:
Файл в папке мультимедиа: Final_Products ___ 2019-04-01_17: 50: 43.487845.xlsx
Моя задача Cron выглядит следующим образом:
class MyCronExportJob(CronJobBase):
""" Cron job which removes expired files at 18:30 """
RUN_AT_TIMES = ['18:30']
schedule = Schedule(run_at_times=RUN_AT_TIMES)
code = 'app.export_cron_job'
def do(self):
now = datetime.datetime.now()
media_folder = os.listdir(os.path.join(settings.MEDIA_ROOT, 'exports'))
for files in media_folder:
file = os.path.splitext(files.split(settings.EXPORT_TITLE_SEPARATOR, 1)[1])[0]
if datetime.datetime.strptime(file, '%Y-%m-%d_%H:%M:%S.%f') + timedelta(minutes=settings.EXPORT_TOKEN_DELAY) < now:
os.remove(os.path.join(os.path.join(settings.MEDIA_ROOT, 'exports'), files))
# settings.EXPORT_TOKEN_DELAY = 60 * 24
Я отредактировал свой crontab -e:
30 18 * * * source /home/user/Bureau/Projets/app/venv/bin/activate.csh && python /home/user/Bureau/Projets/app/src/manage.py runcrons --force app.cron.MyCronExportJob
Затем я запустил service cron restart
Но ничего не изменилось.Мой файл все еще там.Однако его следует удалить, поскольку его дата превышает now + settings.EXPORT_TOKEN_DELAY
Я использую Ubuntu для локального разработчика и FreeBSD в качестве среды производственного сервера.
РЕДАКТИРОВАТЬ:
Я пробовал кое-что, но на данный момент crontab не работает.
1) * * * * * /bin/date >> /home/user/Bureau/Projets/app/cron_output
==> Это работает, поэтому crontab работает
2) IВыполнено: python manage.py runcrons
в моей консоли ==> Это работает
3) Я запустил этот скрипт (cron.sh):
source /home/user/.bashrc
cd /home/user/Bureau/Projets/app
pyenv activate app
python src/manage.py runcrons --force
deactivate
==> Это работает
4) Я запустил эту строку crontab:
35 10 * * * /home/user/Bureau/Projets/app/utility/cron.sh
==> Служба перезапустилась в 10h32, я ждала до 10h38: ничего!