我写了一些从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
答案 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>