记录一些django常见功能的用法。
这次主要关注点是crontab定时任务,django/python的异常捕获,以及django/python的打印log功能
继续阅读“[django笔记]crontab,异常捕获和打印log”
gunicorn中一个同步任务的坑
最近有些django定时任务要跑,又懒的做异步celery worker tasks了,就是普通的同步任务,用的django crontab,其中django用的是gunicorn->nginx的部署方式。但几天下来,发现任务总是执行到一半就停了,排错发现一个偶尔会出现的坑
...
利用nginx_upload_module搭建http文件服务器
服务端主要就是用的nginx-upload-module和nginx-fancyindex两个nginx模块做接收,然后python后端做处理
然后客户端的编写分为两部分,一部分是python客户端,用的requests库,另一部分是web客户端,用的是Huploadify框架
扩展并修改bash源码使支持rsyslog且增加审计条目
最终效果:
log记录:
/var/log/messages
saltstack的安装和基本使用
saltstack可用于批量管理集群,用的是c/s架构,master管理多个minion
测试系统:debian8.7
一.安装master
1.添加apt key
wget -O - https://repo.saltstack.com/apt/debian/8/amd64/latest/SALTSTACK-GPG-KEY.pub | sudo apt-key add -
关于supervisor/gosuv等控制django/flask进程的小贴士
在使用supervisor/gosuv等进程控制程序控制django/flask进程时,常常会出现一个"BUG"------输入supervisor restart {app}/gosuv stop/start {app}后,经常会出现django/flask重启失败,因为端口已占用的错误。
这里我们常常想到,先把端口关掉不就可以了?经常在代码中加入如下命令:(如果程序是django或者flask,占用的端口是82端口)
import subprocess import os pid = os.popen("lsof -i:82|grep python|awk '{print $2}'").read() if len(pid): subprocess.check_output("kill -9 "+str(int(pid)), shell=True) #注意,这里一定要用subprocess库来kill进程。用os.system运行kill -9或os.kill()都会导致新进程产生
这样虽然可行,但是比较麻烦。其实占用端口的原因是flask/django服务器自动reload造成的,只需要在supervisor/gosuv的启动指令里,加上--noreload参数就不会产生这个"BUG"了,举例如下:
#原来启动指令 python manage.py runserver 0.0.0.0:82 #更新启动指令 python manage.py runserver 0.0.0.0:82 --noreload
搞定
部署sentry捕获项目错误信息
sentry是一款专用于捕捉项目错误信息的分布式开源软件,可以轻松的捕捉到不同项目的错误信息并汇总,方便实时查看上下文排错以及报警等。
最终效果图如下:
继续阅读“部署sentry捕获项目错误信息”
django使用middleware实现views的访问限制
需要实现这样的需求,对于以个django app,需要对其中的一些restful api做IP访问限制,这样实现起来最方便的是在middleware中写逻辑。
关于django中间件的说明:
http://usyiyi.cn/translate/Django_111/topics/http/middleware.html
http://python.usyiyi.cn/translate/django_182/topics/http/middleware.html
继续阅读“django使用middleware实现views的访问限制”
supervisor集中化管理web工具cesi
linux进程管理器supervisor是会经常被用到的,但服务器多了之后,每个服务器的进程也不方便管理。同时,supervisor自带的web界面比较简陋,所以尝试了一下官网推荐的一些第三方开源软件,推荐一下这个cesi。
最终效果如下:
继续阅读“supervisor集中化管理web工具cesi”
使用zabbix api提取趋势(trend)和历史(history)数据
zabbix restful api说明见官网文档
https://www.zabbix.com/documentation/4.0/zh/manual/api/reference/apiinfo
使用了github上封装好的python zabbix api,免去了自己造轮子的过程
https://github.com/lukecyca/pyzabbix
继续阅读“使用zabbix api提取趋势(trend)和历史(history)数据”