我有一个脚本,当从命令行调用以删除空文件夹时,工作没有问题。当在服务器(Ubuntu)上时,我激活虚拟环境,并导航到类似
的项目cd djangoprojects/some_project
然后运行
python core/remove_empty_folders.py media False
一切正常。
然后我想用cron实现相同的脚本。我首先使上述脚本可执行。
这是我认为应该工作的(尝试了很多变种!)(全部在一行!)
/home/username/virtualenvs/some_project_env/bin/python
/home/username/djangoprojects/some_project python core/remove_empty_folders.py media False
媒体文件夹的所有权是www-data
然而,它只是不起作用,我不知道为什么?我无法从cron获得有关问题的反馈意见,所以希望有人可以提供帮助。
非常感谢
答案 0 :(得分:1)
嗯,如果你激活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管理命令可能是另一种探索途径(这也可以让您利用哨兵记录来查看遇到的任何问题):
0 2 * * * source /home/projects/someproject/venv/bin/activate && /home/projects/someproject/appcode/manage.py refresh_data
修改强> 另一个调试步骤:您可以添加一些诊断打印语句,然后通过查看/ 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或你把消息放在哪里都有文件权限。