Django 使用Python虚拟环境删除空文件夹的Cron作业

Django 使用Python虚拟环境删除空文件夹的Cron作业,django,python-3.x,cron,Django,Python 3.x,Cron,我有一个脚本,当从命令行调用它来删除空文件夹时,它可以正常工作。在服务器(Ubuntu)上时,我激活虚拟环境,并导航到类似的项目 cd djangoprojects/some_project 然后跑 python core/remove_empty_folders.py media False 一切正常 然后我想使用cron实现相同的脚本。我已经使上面的脚本首先可执行 这是我认为应该起作用的(已经尝试了许多变体!)(都在一行上!) 媒体文件夹的所有权是www数据 然而,它只是不起作用,我不知

我有一个脚本,当从命令行调用它来删除空文件夹时,它可以正常工作。在服务器(Ubuntu)上时,我激活虚拟环境,并导航到类似的项目

cd djangoprojects/some_project
然后跑

python core/remove_empty_folders.py media False
一切正常

然后我想使用cron实现相同的脚本。我已经使上面的脚本首先可执行

这是我认为应该起作用的(已经尝试了许多变体!)(都在一行上!)

媒体文件夹的所有权是www数据

然而,它只是不起作用,我不知道为什么?我无法从cron那里得到任何关于问题的反馈,所以希望有人能在这方面提供帮助


非常感谢

嗯,如果在激活virtualenv时它起作用,那么从cronjob执行此操作可能会解决问题?也许是这样的:

*/10 * * * * source /home/username/virtualenvs/some_project_env/bin/activate && python /home/username/djangoprojects/some_project/core/remove_empty_folders.py media False
我经常使用cronjobs来激活虚拟环境,然后运行Django管理命令。如果您仍然遇到任何困难,那么将Python脚本转换为Django管理命令可能是另一个需要探索的途径(这也可以让您点击sentry日志查看出现的任何问题):

编辑 另一个调试步骤:您可以添加一些诊断打印语句,然后通过查看/var/log/syslog或管道化cron作业的输出来查看管理命令的输出。比如说,

*/10 * * * * source /home/username/virtualenvs/some_project_env/bin/activate && python /home/username/djangoprojects/some_project/core/remove_empty_folders.py media False >> /var/log/mycronjob.txt

如果您这样做,只需确保您的cron用户对/var/log或您放置消息的任何位置具有文件权限。

Hi Robert,谢谢您的回复。我已经尝试了第一个选项(运气不佳),并且确实考虑过运行一个管理命令,我将在下一步尝试并报告。非常感谢,不用担心,祝你第二步好运。我还刚刚编辑了一些关于如何从cronHi Robert那里获得更多信息的建议,我正在使用一个管理命令,在我登录时没有收到任何错误,但是服务器上的空文件夹仍然没有被删除。问题可能是媒体文件夹的路径吗?在我剩下的代码中,我只是在使用“媒体”,这很有效?嗯,你确认它正在运行吗?(可能某些文件路径或权限已关闭,因此python代码没有实际运行)。或者,可能是cron作业现在正在文档根目录下运行,因此相对文件路径不再工作。如果这两个都不是问题,是否可以发布remove_empty_folders.py的内容?我知道您提到,当您在cron作业之外运行它时,它可以工作,但是代码本身可能存在相对文件路径、权限或导入问题。嗨,Robert,非常感谢您回来。如果可以的话,我今天将进一步研究这个问题,并将向大家汇报。
0 2 * * * source /home/projects/someproject/venv/bin/activate && /home/projects/someproject/appcode/manage.py refresh_data
*/10 * * * * source /home/username/virtualenvs/some_project_env/bin/activate && python /home/username/djangoprojects/some_project/core/remove_empty_folders.py media False >> /var/log/mycronjob.txt