简单的Coder

Code is my life, that's it.

微信公众账号LinuxTips归档

由来

前些天申请了一个微信公众账号LinuxTips,顾名思义,用来推荐一些常用或有用但不太熟知的技巧,多多少少希望能对Linux初学者有一些帮助。连续发了一两周下来发现订阅者越来越多,说明还是有些帮助,所以我准备把这事儿坚持下去。我准备用这篇日志来记录LinuxTips的历史发布,方便大家日后查阅。

LinuxTips使用指南

在此之前,我先列一下未来LinuxTips的一些使用技巧和上线时间,一方面是来督促自己认真对待这个事儿,一方面也是为了给大家提供一个简单使用指南,一些简单的操作命令(不定期地添加新的命令):

  • lshelp 查看可用命令
  • history 查看历史发布的Tips
  • about 关于
  • m+11位手机号码 手机号码归属地查询

LinuxTips历史归档

离开校园进入社会需要明白的几件事情

前两天从HN的Top10中看到一个Post:9 things I wish someone had told me about life after college,从自己离开大学到现在工作3年的经验来看,这些建议还是很中肯的。

这里自己根据文中建议和自己的感悟归纳出来几点,希望以后自己能够常常想起这些意见。

  1. 做好迎接一个完全不同的世界。这里再也没有寒暑假。
  2. 学校走出来,健身房走进去。保持活力,应对生活和工作的节奏与压力。
  3. 尽量多参与集体饭局,记下大家的电话号码。
  4. 保持大学时候的兴趣爱好。比如,踢球,游泳,瑜伽,阅读。你可以结识到一些很优秀的志同道合的朋友。
  5. 留意自己身边的小幸福。
  6. 生活要保持规律。早起,晚睡。年轻人晚睡一些没有多大关系,保证一天7个小时睡眠足矣。好好利用剩下的17个小时。
  7. 努力工作,待人友善。
  8. 好好利用互联网这个老师,它会帮你发现自己潜在的价值。

多服务器管理之Fabric

背景

最近公司服务器从单机扩展到三机,新环境的搭建和部署也采用了新的自动化方式:Fabric

什么是Fabric

Fabric其实就是一套用Python封装了基于SSH的常见操作的库。因此,它的优势显而易见:

  1. 你可以用Python代理Shell来做运维工作。
  2. 方便集中式管理多台服务器。

怎样使用Fabric

有Python基础的程序员对Fabric一点都不会陌生,因为它就是Python。
我们先从一个简单的例子开始:

fabfile.py
1
2
3
4
from fabric.api import local

def host_type():
    local('uname -s')
1
fab host_type

上面例子的便是实用fabric在local环境下执行命令uname,就是这么简单。下面在看一个在remote环境下的操作:

fabfile.py
1
2
3
4
5
6
7
8
from fabric.api import run

env.user = 'pat'
env.key_filename = '~/.ssh/id_rsa'
env.password = 'patpassword'

def host_type():
    run('uname -s')
1
fab host_type

注意,这次我们用run代替了local,它的意思是在remote机器上执行某命令。当然,能够从local连接到remote,并且有执行权限才可以执行,这些都是可以在env中指定的。env结论是整个fabric脚本执行中的一个全局变量,env.userenv.key_filenameenv.password都是env的保留关键字,分别指明登陆remote的user,密钥以及密码。密钥和密码可以是二选一。密码在使用sudo命令的时候是必须的。
如果我们想要管理多台remote服务器的时候该怎么做呢?好,我现在开始介绍。
首先,我需要引入Fabric中的一个概念:role。你可以把role理解成remote的标识,它可以是一个remote,也可以是一组remotes,通常我们在fabfile中是用env.roledefs来定义的,然后通过指定env.roles来决定使用那一个/组roles。

fabfile.py
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
26
27
28
29
30
31
32
33
34
35
36
37
env.roledefs ={
    'local': ['localhost'],
    'prd_1': ['192.168.0.100'],
    'prd_2': ['192.168.0.101'],
    'prd_3': ['192.168.0.102'],
    'product': ['192.168.0.100',
            '192.168.0.101',
            '192.168.0.102',
            ]
}

def prd_1():
    env.user = 'pat'
    env.key_filename = 'xxxx'
    env.password = 'patpassword'
    env.roles = ['prd1']

def prd_2():
    env.user = 'pat'
    env.key_filename = 'xxxx'
    env.password = 'patpassword'
    env.roles = ['prd2']

def prd_3():
    env.user = 'pat'
    env.key_filename = 'xxxxx'
    env.password = 'patpassword'
    env.roles = ['prd3']

def product():
    env.user = 'pat'
    env.key_filename = 'xxxx'
    env.password = 'patpassword'
    env.roles = ['product']

def host_type():
    run('uname -s')
调用
1
2
3
4
5
6
7
8
# 只在prd_1上执行
fab prd_1 host_type

# 只在prd_2上执行
fab prd_2 host_type

# 同时在三台remote上执行
fab product host_type

看到这里,你是否发现其实fab就是在依次执行后面的方法。嗯,其实道理就是这么简单。

现在,你就可以用Fabric进行自己的集群运维管理了。提示一下,下面两个API不多,先好好了解下Fabric都可以做些什么吧:

  1. Core API
  2. Contrib API
  3. 提供一个完整的Fabfile做参考:fabfile.py