0

如果条件为真,我想使用一个cron任务来删除。media files

用户生成存储在 Media 文件夹中的导出文件。为了在后台清理导出文件,我有一个 Cron 任务,它遍历每个文件并查看是否通过了过期延迟。

我用django-cron图书馆

例子:

媒体文件夹中的文件: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)我跑了: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:什么都没有!

4

0 回答 0