运行 django manage.py cron 中的命令

run django manage.py command in cron

我已经从 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

将文件 run.py 与 settings.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:])))

然后转到您的应用程序文件夹并使用 test() 函数制作文件 cron.py

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

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

python run.py your_app_name.cron "test()"

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

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