如果条件为真,我想使用一个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:什么都没有!