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