宝塔面板执行Django任务
我们执行可以使用django-apscheduler 来执行定时任务但是有时候不稳定,如果您的服务器上安装了宝塔面板,那么我们可以通过宝塔面板来执行定时任务,设置步骤如下:
一、创建manage自定义命令
应用程序可以用 manage.py 注册自己的动作。例如,你可能想为你正在分发的 Django 应用添加一个 manage.py 动作 要做到这一点,将一个 management/commands 目录添加到应用程序中。Django 将为该目录中名称不以下划线开头的每个 Python 模块注册一个 manage.py 命令。例如:
polls/
__init__.py
models.py
management/
__init__.py
commands/
__init__.py
_private.py
closepoll.py
tests.py
views.py
在这个例子中,closepoll 命令将提供给任何在 INSTALLED_APPS 中包含 polls 应用程序的项目。
_private.py 模块将不会作为管理命令使用。
closepoll.py 模块只有一个要求——必须定义 Command 类,该类继承自 BaseCommand 或其 子类。 要实现该命令,请编辑 polls/management/commands/closepoll.py 如下:
from django.core.management.base import BaseCommand, CommandError
from polls.models import Question as Poll
class Command(BaseCommand):
help = "Closes the specified poll for voting"
def add_arguments(self, parser):
parser.add_argument("poll_ids", nargs="+", type=int)
def handle(self, *args, **options):
for poll_id in options["poll_ids"]:
try:
poll = Poll.objects.get(pk=poll_id)
except Poll.DoesNotExist:
raise CommandError('Poll "%s" does not exist' % poll_id)
poll.opened = False
poll.save()
self.stdout.write(
self.style.SUCCESS('Successfully closed poll "%s"' % poll_id)
)
当你使用管理命令并希望提供控制台输出时,你需要 write 至 self.stdout 和 self.stderr,而不是直接 print 至 stdout 和 stderr。利用这些代理,测试自定义命令会更方便。还需要注意的是,你不需要用换行符来结束消息,它会自动添加,除非你指定了 ending 参数
self.stdout.write("Unterminated line", ending="")
这个新的自定义命令能用 python manage.py closepoll <poll_ids>
调用。
二、设置定时任务
在宝塔面板的定时任务添加一个脚本任务,脚本内容为:
#!/bin/bash
# 进入你的Django项目目录
cd /www/wwwroot/you_project
# 激活虚拟环境(如果你使用了虚拟环境)
source ~/webenv/bin/activate
# 运行Django管理命令,替换your_command为你需要执行的命令
python manage.py you_command
这样就可以执行django任务了
文档信息
版权声明:可自由转载(请注明转载出处)-非商用-非衍生
发表时间:2024年9月11日 16:58