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比较方便。