CI_Knight

且行善举,莫问前程。

0%

supervisor是python开发的一个守护进程,也是进程管理利器。接触他之后便开始使用它管理服务器上的启动的应用,直到学习Docker之后。

Supervisor官网里面有详细的使用文档

安装

不建议使用pip或者easy_install安装,如果是ubuntu系统建议使用apt-get,以免升级python版本后出现依赖问题。

1
sudo apt-get install supervisor

初始化配置文件

如果使用dpkg安装,则需要初始化配置文件,配置文件在/etc/supervisord/目录下面覆盖掉即可。

1
echo_supervisord_conf > /etc/supervisord.conf

或者指定配置文件

1
supervisord -c supervisord.conf

启动supervisor

1
sudo service supervisord start

开启web管理

修改配置文件,删掉[inet_http_server]配置的注释重启服务,为了安全起见加上密码。

展示一个配置文件

1
2
3
4
5
6
7
8
[program:osu_splider]
command=/home/pi/osu_tool/osu_tool/bin/python /home/pi/osu_tool/osu_splider.py
directory=/home/pi/osu_tool
numprocess=1
autostart=true
autorestart=true
stdout_logfile = /tmp/osu_splider_stdout.log
stderr_logfile = /tmp/osu_splider_stderr.log
  1. [program:xxx] 冒号后一定不能有空格,不然通过supervisorctl管理任务的时候会出现找不到进程的错误
  2. command 运行的程序以及命令
  3. 不再逐条解释,可以选择工作路径程序的运行用户、权限、umask等,详见文档

管理多台服务器一定是自动化运维,因为只有一台服务器,所以用虚拟机创建了3台Ubuntu-Server,开始选择的VirtualBox,因为NAT网络的缘故,主机无法和虚拟机ping通,但是VMware不同,他会虚拟出一个网卡,和虚拟机联通,这样使用NAT更为方便。用VirtualBox,自建虚拟网卡没成功。

还有个方法就是,一个虚拟机使用桥接,虚拟机连入NAT网络中的其他虚拟机,主机通过桥接的虚拟机SSH反向代理连入其他虚拟机。学习个Ansible搞那么麻烦,直接安装VMware吧。

进入Ansible

在google查的资料上说,Ansible通过ssh协议连接服务器,有验证过程。百台服务器以内使用Ansible效率很好,但是千台以上就不适合了。那就需要saltstack了。

安装

我是在Python虚拟环境下安装。直接 pip install ansible。

创建 /etc/ansible/hosts 文件

1
2
3
172.16.75.130:22
172.16.75.129:22
172.16.75.128:22

如果分组,则

1
2
3
4
5
[vm1]    # 组名
172.16.75.130:22 # 主机:指定
172.16.75.129:22
[vm2]
172.16.75.128:22

如果没有使用公钥,使用密码可以这样

1
2
3
4
[vm]
vm1 ansible_ssh_user=root ansible_ssh_host=172.16.75.130 ansible_ssh_pass="test"
vm2 ansible_ssh_user=root ansible_ssh_host=172.16.75.129 ansible_ssh_pass="test"
vm3 ansible_ssh_user=root ansible_ssh_host=172.16.75.128 ansible_ssh_pass="test"

也可以使用通配符 s[001:003].whnzy.com

简单使用

常用参数

1
2
3
4
5
-u username          指定ssh连接的用户名,即执行后面命令的用户
-i inventory_file 指定所使用的inventory文件的位置,默认为/etc/ansible/hosts
-m module 指定使用的模块,默认为command,shell模块可以使用管道,而command则不可以
-f 10 指定并发数,并发量大的时候,提高该值
--sudo [-k] 当需要root权限执行的化,-k参数用来输入root密码,需要安装sshpass(apt-get)

Instance:

第一次连接就会上传公钥

1
2
ansible -i /etc/ansible/hosts all -m command -a 'who' -u haining
ansible -i /etc/ansible/hosts all -m command -a 'who' -u haining

后记

本地没有用root,想用root取执行总是验证失败,而且需要sudo权限的,-k参数也无任何作用。已配置好 本地hosts,config。可以ssh s001 直接登录了。

百度ip定位的接口

1
http://api.map.baidu.com/location/ip?ak=F454f8a5efe5e577997931cc01de3974&ip=202.198.16.3

正好有百度地图的appkey,上面的ak不是本人的。

后来又有查到新浪的ip地址库。

1
2
http://int.dpool.sina.com.cn/iplookup/iplookup.php
http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=123.123.123.123

还有haoservice的库

1
http://www.haoservice.com/docs/5

打开了访客评论,又出现了很多垃圾评论,上次还有个臭名昭著的ip访问站点。

使用 nginx 的 ngx_http_access_module 模块可以封配置内的ip或者ip段。

建立配置文件 blockips.conf ,添加一下内容

1
2
3
4
allow 10.42.0.25;
allow 10.0.43.0/25;
deny 10.0.42.0/25;
# allow all; or deny all;

并且在主配置文件中引入该文件。重启nginx,再次访问403错误。

因为下载了一份JAVA程序源码,在Ubuntu上全是乱码,我想也是用了GBK编码,所以打算用Python处理下。代码写的乱

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# coding = utf-8
import os

def convert(root, target_filePath, from_encode='gbk', to_encode='utf-8'):
if os.path.exists(root) and os.path.exists(target_filePath):
if os.path.isabs(root):
list_dir = os.listdir(root)
for l in list_dir:
if os.path.isdir(os.path.join(root, l)):
if not os.path.exists(os.path.join(target_filePath, l)):
os.mkdir(os.path.join(target_filePath, l))
convert(os.path.join(root, l), os.path.join(target_filePath, l), from_encode, to_encode)
else:
with open(os.path.join(target_filePath, l), 'w') as f:
for i in open(os.path.join(root, l), 'r'):
f.write(i.decode(from_encode).encode(to_encode))
else:
file_pteh = os.path.join(os.getcwd(), root)
convert(file_pteh, target_filePath, from_encode, to_encode)
else:
print 'fuck!'

root = '/home/haining/bbs'
tar = '/home/haining/tmp'
convert(root, tar)

可以实现将一个目录下的所有文件,转换成指定编码,并且保证目录结构.

GET_ICON(获取网站favicon.ico图标)

在cblog中添加了获取网站icon的功能,并且开放出来接口,bug略多,正在优化当中。并且这个接口今后有其他的打算。

接口使用方法

Ver = 2.0 / 2015-05-01

碰上服务器的那种 Bug 我也是没有办法,接口就是接口,规定下使用方法。

1
2
3
4
接口地址:http://www.whnzy.com/tools/get_icon/
添加参数:
http://www.whnzy.com/tools/get_icon/www.cnblogs.com/
http://www.whnzy.com/tools/get_icon/www.baidu.com/?schema=https://

修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1,聚合接口代码。
2,去掉schema,使用get参数传递scheme,默认为 http
3,修改正则获取方式。 #百度因为首页有个奇葩的 .ico 的css 类,目前有bug。
> 影响范围www.baidu.com
> baidu.com无影响
V = 2.1
1,除火狐浏览器外都会下载文件。
2,修复403错误

4,下一版本修改:
> 添加cdn库,无需每次都去请求(服务器,或者OSS缓存)。正则。添加icon错误反馈。
> 修复有些网站403错误,防止爬虫请求。
> 修复跳转连接无法获取icon
> 因为大多网站图像大小规格不正规,加入图像处理。
> 除火狐浏览器外都会下载文件。
> = - = 有人依然会添加schema
> 无icon,使用默认图标

如果站点想要调用接口,请联系[email protected]

Ver = 1.0 / 2015-04-28

1
2
3
4
接口地址:http://www.whnzy.com/tools/get_icon/
添加参数:
http://www.whnzy.com/tools/get_icon/http://www.cnblogs.com/
http://www.whnzy.com/tools/get_icon/www.cnblogs.com/

出错几率比较高。有些网站页面无添加favicon,浏览器会默认去访问 根目录下的该文件,百度,网易云音乐都是如此,功能正在开发中。

该功能可用于友情链接的icon使用. 项目地址