Python的常见类型
None
None一句话就是有点类似其它语言的NULL。是个无类型的值。None等于False。
Dictionaries 字典类型。
其实就是常见的 Key => Value 键值对类型,当索引的key不存在的时候,会抛出KeyError
类型实例
| 1 | mydict = {'a':1,'b':2} | 
字典类型的key必须是不可以变的。
字典的赋值十分简单,无论key存在与否,都可以直接赋值。存在的话就改变值,不存在就自动新建一个。
判断key是否存在 in 和 not in
例子:
| 1 | nums = { | 
结果:
| 1 | True | 
字典一个比较有用的函数 get
当你访问一个不存在的key的时候,它会返回一个特殊值None,还可以自定义缺省值,找不到就返回某个值。
例子:
| 1 | nums = { | 
结果:
| 1 | a | 

Python数组append比insert有效率
由于list的实现不是传统意义上的链表实现,采用的是在一块连续的内存空间。所以在Insert的时候,经常要将插入的位置右边的数据挪一下。而append并不需要。
所以能用append的尽量用append。

Centos7 安装最新版Jenkins
配置jenkins源
| 1 | sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo | 
直接 yum install jenkins是安全版本非最新版。
可以去 https://pkg.jenkins.io/redhat-stable/
下载自己喜欢的版本
比如我安装最新版
| 1 | yum install https://pkg.jenkins.io/redhat-stable/jenkins-2.89.4-1.1.noarch.rpm | 
vim /etc/sysconfig/jenkins 编辑下配置文件
我主要改了端口和home目录
启动
| 1 | systemctl start/enable jenkins | 
http://120.79.138.224:10086/generic-webhook-trigger/invoke?token=offence-reporting-service
https://wiki.jenkins.io/display/JENKINS/CloudBees+Docker+Build+and+Publish+plugin
#参考资料

用supervisor来监控进程
Supervisor简述
关于Java进程监控,一直都是要搞的。至于怎么实现,一直比较纠结,也就拖了很久。
最近看到supervisor,感觉还不错,打算试试。
简单简单一句话描述supervisor的作用的话。
可以把一个命令变成daemon进程管理,可以实现异常重启
另外还提供了API,这为提供WEB式管理提供了便利,官方有带了一个简陋的web界面,也有一些第三方的似乎看起来也不错。
通过supervisor运行的,都成为supervisor的子进程,它也是通过这个去管理进程,比通过pid文件管理更稳定。因为有时候进程异常退出,pid存放的数据就是错的,有可能导致其它进程被意外终结。
支持的平台
Supervisor works on just about everything except for Windows. 
准确点说,基本UNIX-Like系统都支持。
主要组件
supervisord
supervisor的服务进程,响应客户端的命令、管理子进程
使用的时候要读取配置文件。寻找配置文件的优先级如下:
| 1 | $CWD/supervisord.conf | 
不过建议还是启动的时候,制定配置文件所在的绝对路径。
supervisorctl
supervisor的命令行客户端
配置项在  [supervisorctl]
Web Server
supervisor的web服务,web提供少量功能管理supervisor。
配置[inet_http_server] 项
XML-RPC
API接口
安装
- sudo pip install supervisor
or
- esay_install supervisor
安装完运行echo_supervisord_conf,如果能输出配置,那就安装完成了。
使用说明
配置
其实在echo_supervisord_conf后,前面几行就有官方的配置说明文档链接:http://supervisord.org/configuration.html
不过未免巨细无遗了。
根据需求,我们需要监控进程,需要可以在线管控进程状态,简单配置几项就行了。配置文件语法是Windows-INI Style。
创建配置
启动supervisord组件的时候,它会从前面提到的搜寻文件路径,按优先级去找配置文件。为了避免加载到非我们修改的配置,建议启动的时候-c指定一些配置文件。
*这里为了方便管理配置文件,我把它放到/etc/supervisor/supervisor.conf program的配置文件放到 ./conf.d/*.conf *
| 1 | # mkdir -p /etc/supervisor/conf.d/ | 
修改配置
- vim /etc/supervisor/supervisor.conf
主要改动如下内容:
| 1 | [inet_http_server] ; inet (TCP) server disabled by default | 
这里port,如果你想可以通过外网IP+端口访问web dashboard,那就改为*:9001或者0.0.0.0:9001
这里我打算到时候用nginx做反向代理,绑定域名,所以就无所谓,127.0.0.1 。
username和password就是管理账户。
| 1 | [include] | 
这里原本是ini后缀的,但是我想入乡随俗,在linux就改为conf后缀的配置文件吧。用的相对路径,如果我们加载的是/etc/supervisor/supervisor.conf 那这个就表加载/etc/supervisor/conf.d/目录下所有的conf文件。
事实这个可以省了,program配置直接写在主配置文件里面。不过,如果程序多的话,还是建议分开。像nginx一样,这样利于以后维护各个配置。
主配置里面有很多program的配置示例,可以复制一个过去修改即可使用。
- 新建一个配置vim /etc/supervisor/conf.d/java_room_status.conf
复制主配置里面一段program的配置出来贴上,稍作修改即可。
| 1 | [program:roomstatus_dev] | 
参考资料

Pyrsync使用说明
Pyrsync
调用rsync同步文件,从yaml文件读取配置。简化rsync使用,和方便管理备份项更改。未来将提供web界面添加yaml配置。
安装依赖
sudo pip install -r requirements.txt
sudo yum install -y rsync
使用说明
- 新建项目yaml配置文件 - cp playbook/default.yaml.template playbook/default.yaml
- 配置好项目使用哪个账户复制,ip、备份目录之类的。 
- 要提前做好要备份的主机公钥认证,好让rsync不用输入密码。 
- 执行 ./pyrsync.py 
yaml配置文件说明
- actor项说明
| 项 | 作用 | 
|---|---|
| name | 做了ssh公钥认证登录的用户 | 
| IP | 要备份的内容所在的服务器IP | 
| port | ssh端口 | 
| action | rsync的参数项可以自由写 如:-avz –delete | 
- execute项说明 脚本统一放在- script目录
填写脚本文件名,理论支持shell,Python等,
一定要在脚本开头定义好解析器。如bash #!/bin/bash
| 项 | 作用 | 
|---|---|
| pre-local | 同步前在本机执行 | 
| pre-remote | 同步前在远程机执行 | 
| post-remote | 同步后在远程机执行 | 
| post-local | 同步后在本机执行 | 
- playbook剧本- sences场景项说明
- 一个场景配置一个目录、和一个排除文件,排除文件目录在 - exclude,填写文件名即可。排除支持通配符,一行一个筛选项。cvs.txt是例子。
| 项 | 作用 | 
|---|---|
| item | 要备份的目录 | 
| savepath | 保存到本地的目录 | 
| exclude | 描述排除文件的文件名 在exclude目录 | 
使用场景
我要定时对 192.168.168.19上的三个项目的uploads目录进行同步备份。
分别是
- /data/web1/uploads
- /data/web2/uploads
- /data/web3/uploads
还要定时导出MySQL数据库test2,到/data/sql,并同步备份过来。但是过滤掉.git目录、.svn目录。
备份内容保存到本地 /backup/node1 目录
根据上面信息,可以配置一个如下的yaml文件。
test.yaml (名字可以随意取,后缀一定得是yaml)
| 1 | actor: | 
上面pre-remote的test.sh内容如下
| 1 | #!/bin/bash | 
备份前目录情况如下:
远程机/data/ :
| 1 | /data | 
本机 /backup/node1/:
| 1 | node1 | 
现在执行./pyrsync.py
执行后
| 1 | /backup/ | 

Python写的备份小工具
项目地址: https://github.com/onecer/Pyrsync
readme: https://uublog.com/article/20170630/pyrsync-readme/
===========================================================================
打算用rsync同步,刚刚在写shell的时候,尝试了下,项目多了,目录多了。shell代码就眼花缭乱。
所以,这样封装了一下,备份的项目用yaml描述。100行代码,可以更方便的去管理备份源。
项目代码:
| 1 | #!/usr/bin/env python | 
配置格式如下:
| 1 | actor: | 
安装
Pyrsync
调用rsync同步文件,从yaml文件读取配置。简化rsync使用,和方便管理备份项更改。未来将提供web界面添加yaml配置。
安装依赖
sudo pip install -r requirements.txt
sudo yum install -y rsync
使用说明
- 新建项目yaml配置文件 - cp playbook/default.yaml.template playbook/default.yaml
- 配置好项目使用哪个账户复制,ip、备份目录之类的。 
- 要提前做好要备份的主机公钥认证,好让rsync不用输入密码。 
- 执行 ./pyrsync.py 

Git用webhook实现自动更新网站
最近公司大部分项目从SVN过渡到Git。所以代码自动化部署也有了更多的想象空间。
之前使用SVN更新代码到开发环境的时候,都是用crontab定时svn update。间隔是一分钟,虽然一分钟不算长,甚至有时候等待并不需要这么久。
但是总归是无法做到及时更新。算是自动主动更新,而Git有webhook的存在,就可以做到触发式更新。
我们代码是放在 git.oschina.net 码云上。
原理
每次git提交的时候,都会触发webhook,webhook会访问我们设置的URL。
URL触发我们的更新代码。
所以,我们还需要架一个网站,提供一个webhook访问的URL,访问的时候触发代码。
实践
时间原因,轮子就不自己造了,所以,我找到一份还不错的webhook管理平台。
- git-webhook: https://github.com/NetEaseGame/git-webhook
安装git-webhook
环境: Centos7
这里用docker部署
| 1 | # 安装启动docker | 
GITHUB: GitHub 登陆配置,可以到 OAuth applications 自行申请,登陆 Callback 地址为: your_domain/github/callback.
配置好后,就可以执行
| 1 | # docker-compose up | 
第一次启动的时候会docker会pull几个需要的镜像,所以时间要长点。
以后启动的话,可以用docker-compose up -d 用deamon方式启动。
Nginx配置
启动后,docker 暴露出来的端口是 18340.访问的话,就是 http://ip:18340
所以我打算给它绑定一个域名,让它访问要更方便一点。
| 1 | server { | 
至此git-webhook就安装好了。
用github账号登录进去,先添加服务器,再添加git仓库。得到的url填到git.oschina.net webhook那里就行了。
- 添加好项目后,在箭头方向复制URL

- 登录码云,填写URL到webhook那里

参考资料

代码从SVN迁移到GIT
GIT可以选择有很多,国外有github,国内有coding和git.oschina.net。
因为不可描述的原因,我们选了国内的。注册和管理其实和github很像。
我再做了ssh公钥认证后,将远程仓库git clone一份回本地。这样它就会自动生成一个.git目录了。
其实自己在本地现有的项目下用git remote add 也是可以的,但是感觉要略为麻烦点。
将SVN仓库代码更新至最新,复制多一份。
进入SVN代码目录,删除原来SVN的隐藏目录,.svn,这个内容占了很大空间。
| 1 | find . -type d -name ".svn"|xargs rm -rf | 
将内容复制的到git目录,并提交去远程仓库。
| 1 | git add -A | 
done.

VIM配置推荐-K-VIM
归类到工具吧,算是可以提升效率的东西。自己也折腾过,VIM配置插件还是挺麻烦的。直到看到这个,一键配置,这个项目再github居然有3K的star。
https://github.com/wklken/k-vim
安装方法不赘述,帮助文档有。
用来写Python和其它脚步,做些小修改,算是一个好的补充吧。毕竟大部分时候还是专业的IDE比较方便。

