在cron中运行django manage.py命令

时间:2018-05-15 11:20:51

标签: django django-manage.py pipenv django-management-command

我写了一些从cron运行的管理命令。我正在使用pipenv虚拟环境

从终端直接运行很有效。

cd <project_path> pipenv run python manage.py <my_command>

我添加了与cron相同的脚本

cd /home/project_path && pipenv run python manage.py <my_command>

但这是错误的

/bin/bash: pipenv: command not found

我也尝试了以下命令

 cd /home/project_path && python manage.py <my_command>

给出错误

File "manage.py", line 14
    ) from exc
         ^
SyntaxError: invalid syntax

2 个答案:

答案 0 :(得分:0)

使用settings.py文件将文件run.py放在根文件夹中(注意!您的项目结构可能不同):

#!/usr/bin/env python
import os
import sys
import settings

p = os.path.abspath(os.path.join(os.path.dirname(__file__)))
sys.path.insert(0, '%s' % p)
sys.path.insert(0, '%s/apps' % p)
from django.core.wsgi import get_wsgi_application
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
from django.conf import settings
application = get_wsgi_application()

module_name = sys.argv[1]
exec('import %s' % module_name)
exec('%s.%s' % (module_name, ' '.join(sys.argv[2:])))

然后转到您的app文件夹并使用test()函数生成文件cron.py

def test():
   print ('Hello world')

最后输入下一个控制台命令:

python run.py your_app_name.cron&#34; test()&#34;

答案 1 :(得分:0)

解决了我的问题是为每个模块设置绝对路径,如

cd <project_path> && /root/.local/bin/pipenv run /home/user/.local/share/virtualenvs/myproject-IuTkL8w_/bin/python manage.py <my_command>