# fablinker
## 1.fablinker是什么
fablinker是一个多服务器项目部署和管理的工具。
基于python 2.7，用到fabric第三方库，在一台服务器上可管理控制多个远程主机，目前V0.01已开发完成。
首先需要确保所用的机器能用ssh连接。

![原理图](img/fab.png)

## 2.应用场景

### 2.1 项目部署

比如分布式项目部署在12台机器上，一旦代码更改，那么所有worker上的代码都要更新。
当然你可以写一个shell脚本，用12个scp命令从master上将代码拷贝到worker上，但是相对麻烦一点。
用fablinker工具只需一个put命令搞定。
然后我还需要kill掉所有worker进程，重新启动程序。没办法，这样你就只有一个个登录worker服务器，用kill，sh  **.py命令依次执行。
用fablinker工具只需kill 和 sh **.py两条命令搞定。
如果我还要将各个woker上生成的数据 data.dat收集起来，同样你可以写shell脚本用12个scp命令。
用fablinker工具只需一个get命令搞定。

### 2.2 运维

比如公司给分配了50台服务器，现在需要个每台服务器安装些软件，配置些环境。可以写个shell脚本，然后用scp将脚本分发到各个服务器上，
依次登录各个服务器，执行该shell脚本。
用fablinker可以在所有服务器上执行命令，当然也支持批处理和root权限（正在开发中，v0.02完成）。

## 3.fablinker有哪些功能

* put : 从本地主机上分发文件至所有远程主机
* get : 从远程主机上收集文件至本地主机，将远程主机文件都搜集到本机并将文件名带上主机名，-n参数，将远程文件名加上数字
* at: 切换到某个单机，或者切换到某个机器组
* addgrp: 动态机器分组
* fab shellcmd : 在所有远程主机上执行shellcmd命令， 比如 ls ， php  test.php， kill
* fab vim test.txt : 依次打开所有远程主机上的test.txt文件，可写入，更改， 保存。
* !cmd   可以在本地执行命令

## 4. 安装和使用

### 安装

1.下载源码安装

下载源码压缩包，解压后在目录中运行：

python setup.py install

会在当前用户的home目录下创建一个.fablinker目录，并在目录里创建默认配置文件fabconf.ini

2.pip安装

pip install fablinker



### 4.1 配置文件
可以到.fablinker修改默认配置文件或者自己创建一个文件在运行命令时指定该配置文件
fablinker -f ***.ini

下面是一份简单的配置文件，

 
```
[baseconf]
user = work
password = **
parallel = False
[host_groups]
Group0 = [192.168.181.132,192.168.181.133,192.168.181.134]

spider = [192.168.181.132, 192.168.181.137, 192.168.181.134, 192.168.181.139]
```



baseconf选项是一些基本配置

user：可用ssh登录其他机器的用户名，

password ：登录密码，没有密码是为空

parallel ：多个远程主机是否并行运行命令 , 当然在用fab命令的时候可以加参数动态更改并行选项。注意fab vim 命令不能并行执行，将直接导致错误！


host_groups配置主机分组，可将用于不同项目的主机分组管理。主机间用逗号分隔。


这里创建了Group0，和spider组，可以用at命令切换到不同组，操作不同的远程主机。


如果你的当前目录下存在fabconf.ini文件直接运行 fablinker命令，当然可以用fablinker -f  tmp.ini 来指定不同的配置文件。

### 4.2 人性化
采用命令行交互式

所有命令的使用方法都可以通过输入help命令来查看





对于不同项目的主机可以通过addgrp增加分组，at命令切换到其他分组或单台主机上。

返回结果有警告和错误的会以不同颜色标识：



 

所有的更改配置的操作，当程序退出时会自动保存到配置文件中，比如用addgrp新增分组。

需要在远程主机后台执行命令只需要加上&，  比如 php hello.php &



如果要在本地服务器上运行命令：!cmd
```
>>!date

>>!python hello.py 
```


**批量执行命令：将要执行的命令放入一个文件中**

```fab bt  cmd.txt```

其中cmd.txt文件中一行一个命令

 

### 4.3 如何使用


在终端输入fablinker命令即可：


使用help可查看所有命令，help cmd，可查看cmd命令使用方法

fab date 运行试试，会有惊喜！



![运行示例](img/test.png)

