我维护着一个用Django REST构建的REST API,它在内部抓取几个网页来检索一堆信息。
我对每个端点都进行了测试,以检查刮板是否仍在工作。他们实际上与页面连接并检查来源是否保持不变,并且基本上一切正常。
我想每天运行几次这些测试,并在这些刮刀中的任何一个失败时收到通知。我不确定我应该如何处理这个问题。
我正在寻找一种方法,可以让我:
- 每 X 小时自动运行一次测试
- 通知我结果
我一直在研究CI,但我不确定这是否是这里更可取的方法。
如果你已经有一个脚本来进行测试并通知你(例如通过电子邮件或Pushover,Python中的实现不是太难(,设置一个cron作业:
打开终端并键入crontab -e
,如果系统询问,请选择您的编辑器并添加以下行:
* */X * * * python /path/to/testscript.py
其中 X 应替换为您想要测试的频率。例如,如果您编写 3 而不是 X,则每 3 小时将执行一次脚本。
你可以试试 django-crontab。
- 易于配置。
- 管理相应应用目录中的 crons。
- 可通过
settings
模块进行配置。 - 与
manage.py
集成,可轻松添加、删除和显示 crons。
注意:适用于 Django>=1.8
编辑
示例配置和用法:
- 通过
pip
安装:pip install django-crontab
- 在
settings
模块中添加INSTALLED_APPS
。INSTALLED_APPS = ( 'django_crontab', ... )
- 在项目目录路径中创建一个名为
crons.py
的模块(您可以将其命名为任何名称(。
crons.py(示例路径/path/to/project/<app_name>/crons.py
(:
from .models import FooModel
def foo_scheduler():
# update Foo's bar on each invocation
foos = FooModel.objects.all()
for foo in foos:
foo.bar += 42
foo.save()
- 在
settings
中注册 cron。
settings.py:
...
CRONJOBS = (
# this will recur every 5 mins
('*/5 * * * *', '<app_name>.crons.foo_scheduler'),
)
...
- 最后,使用
python manage.py crontab add
添加到 crontab 中。 - 使用
python manage.py crontab remove
删除。 - 要列出所有活动作业,请
python manage.py crontab show
。
请参阅此处的其他配置选项。