Cron работа с приложением Django - PullRequest
1 голос
/ 11 апреля 2019

Я хотел бы использовать задачу 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: ничего!

...