- 论坛徽章:
- 0
|
本帖最后由 duanjigang 于 2011-03-30 18:03 编辑
谢谢大家多多测试,提出意见和改进建议!
cme.tar1.zip
(1.77 MB, 下载次数: 252)
2011-03-30 补充了客户端程序的功能说明,作为扩展。了解详细信息,参加32-37楼
2011-03-22晚上10点补充
前传:
呵呵,之前就做过一个并发访问多个主机执行命令的工具,叫cme_scanner,是完全开源的,地址见这里:
http://bbs.chinaunix.net/thread-2033561-1-1.html
使用C的pthread并发调用expect自动登录机器执行任务,后来想了想,每个线程在执行每台机器的命令时,又相当于为每个主机启动了一个进程,
这样性能估计不太好,而且超时机制不太好做,expect脚本调用ssh命令,失败的错误原因也不太好分析(或者说我比较懒惰不想分析错误)。
之所以做这个工具,首先是工作需要,另外是想对cme_scanner做一个改进,不想在脚本中写上登录密码,而且多线程调用脚本文件,自己觉得很土。便想搞出来一个“纯粹”的并发访问工具,而且安全一点。
因此,cmeserver和cmeclient诞生了。
帖子前言:
讨论的帖子在此处:
http://bbs.chinaunix.net/thread-1862591-1-1.html
经过几天修改,终成第一版。由于该工具目前为公司内部用,因此还不宜开源,我后面跟领导请示开源下。
由于CU的附件不支持tar.gz格式的,因此把cme.tar.gz改名为tar1.gz1,然后zip打包,解压缩zip后,改名为tar.gz然后使用tar解压缩。
功能说明:类似于ssh的一个工具,一个服务程序和一个客户端命令。不同于ssh之处在于不需要登录,直接通过自己打通的socket通道传输数据和小型文件(二进制方式)。
执行命令:支持单个主机 "-h IP地址"或者 "-f IP地址列表文件"的方式来在若干个机器上执行指定的命令并且返回结果。
上传文件:上传小型文件,不宜过大。同样支持-h IP和 -f 主机IP列表文件的方式运行。
关于开源:
聆听flw等诸位朋友意见,这几天做些修改,会讲代码放出来,得到大家的指点,意见才能改进和提升。呵呵
命令说明:
- usage:cmclient [-p remote port] [-h remote host] [-P local port] [-H localhost] [-f configfile] [-c command] [-n task number] [-u updatefile] [-d dest dir default '/tmp']
复制代码 解释如下:
- -p 服务器端的端口
- -h 服务器地址
- -f 存储服务器IP列表的文件名称,一行一个IP地址。
- 注意,-h和-f不能同时用。
- -P和-H是用来支持异步返回结果的,目前不启用。
- -c "命令" 执行命令
- -u "上传文件全路径" 比如 -u "/tmp/1.txt"将把1.txt上传。
- -d "上传目标目录" 比如 -u "/tmp/1.txt" -d "/etc" 将把本地/tmp/1.txt上传到目的机器的/etc目录下。
- 注意 -c 和 (-u -d)不能同时用,也就是说文件和命令不能在一次执行中支持。
- -n 线程数 如果你的IP有2000个,可以开50个线程,自动分配每个线程40个(最大支持50个线程)
复制代码 比如,一组测试脚本如下:
- #test batch upload file
- ./cmclient -p 12345 -f ip1.conf -u 1.txt -d /tmp/1/2 -n 20
- #test batch run commds
- ./cmclient -p 12345 -f ip.conf -c "uname -a" -n 20
- #test single host command running
- ./cmclient -p 12345 -h 10.32.20.200 -c "uname -a" -n 20
- #test single host file upload
- ./cmclient -p 12345 -h 10.32.20.200 -u Makefile -d /tmp/ -n 20
复制代码 |
|