run command on multi hosts

假如要管理10台以上的同样配置的服务器,我想给所有机器装同一个软件,或者更改同一个配置,该怎么办?连上去一台一台管理明显不现实,我以前时自己写个简单脚本,前提自己先配好公钥认证。 nodes-exec.sh cmd=$@ for i in `cat ./my-nodes.txt`;do echo $i; ssh $i "$cmd" ;done 运行: ./nodes-exec id -u, 即在所有服务器上执行了id -u这个命令,节点少或者执行的命令简单还没什么,如果30个节点,每个节点上执行一个运行超过5分钟的命令,you do the math….. ...

October 16, 2012 · notsobad

about gearman lose jobs

最近遇到个gearman的问题,client一次下2000个任务,然后sleep 10s, 然后再次下2000个任务,如此循环,不关心任务是否完成。 用gearman –status看时,会发现,总任务数会突然有个突然下降,下降的数目超过worker这段时间可以处理的数目,查了好久都没搞明白什么原因。 ...

October 16, 2012 · notsobad

fix gearman job status bug

gearman取任务状态出现keyerror错误,类似这个https://github.com/Yelp/python-gearman/issues/13 ,在评论里有人提供了解决方案,测试可以解决问题. 执行下面这个one liner即可: sudo wget https://raw.github.com/eminence/python-gearman/master/gearman/client_handler.py -O $(dirname $(python -c 'print __import__("gearman").__file__')) gearman坑比较多,python-gearman已经两年没更新了,bug也没人管。 ...

October 15, 2012 · notsobad

wtf about mongodb

昨天搭了个mongodb用来写数据,单条100K左右,运行一晚,写入65万条左右,今天就开始各种崩溃了。 查了下,发现居然是分配了1核cpu、1G内存,马上调整为4核/16G, 以为解决问题,没想到还是跑了一会就崩溃。 无奈写了个脚本放入crontab中,每分钟运行一次,尝试连接mongodb,失败就重启。 ...

October 10, 2012 · notsobad

hbase的行数统计

最近在用hbase做图片存储,大约3000万张图片,每张60k以内。 在hbase shell里 count 'images' 这个速度会非常非常慢。 查了下,有个map reduce的rowcounter,尝试了半天,要用有hdfs写权限的用户执行,如我的系统上要用hdfs这个用户。 sudo crontab -u hdfs -e 10 * * * * (date;hbase org.apache.hadoop.hbase.mapreduce.Driver rowcounter screen_shots) >>/tmp/count_rows.txt 2>&1 上面在crontab里增加了个每小时执行一次rowcounter,将结果追加到/tmp/count_rows.txt ...

October 8, 2012 · notsobad

nginx+多uwsgi的配置

测试下nginx+多uwsgi的配置. 一个flask项目: wangxh@mac : ~/myapp/myhome$ tree . ├── __init__.py ├── s.ini ├── s2.ini ├── templates │ └── index.html ├── ui.py └── ui.pyc wangxh@mac : ~/myapp/myhome$ cat s.ini [uwsgi] socket = /tmp/s.sock master = true module = ui callable = app uid = 4294967294 gid = 4294967294 buffer-size = 25000 wangxh@mac : ~/myapp/myhome$ cat s2.ini [uwsgi] socket = /tmp/s2.sock master = true module = ui callable = app uid = nobody gid = nobody buffer-size = 25000 wangxh@mac : ~/myapp/myhome$ cat ui.py #!/usr/bin/python #coding=utf-8 import sys sys.path.append('/Library/Python/2.7/site-packages') from flask import Flask, request, render_template, redirect, url_for, session, flash import flask import jinja2 import datetime import urlparse import random import hashlib import re app = Flask(__name__) app.secret_key = '\x9a\xf8pJp\xbf\xbdBY\xb0\xfd\xa68\xac\x809j\x0c\xd6\x89\xc5,\xcf\xc2' @app.route('/') def index(): return render_template("index.html") if __name__ == "__main__": #app.debug = True app.run() 配置nginx: wangxh@mac : ~/myapp/myhome$ cat /usr/local/nginx-1.3.6/conf/nginx.conf|grep -v '#'|grep -v '^$' worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream ui { server unix:///tmp/s.sock; server unix:///tmp/s2.sock; } server { listen 80; server_name localhost; location / { include uwsgi_params; uwsgi_pass ui; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } 运行,在两个终端中分别运行: ...

September 18, 2012 · notsobad

amchart hack

我想修改下amchart的饼图样式,动态创建svg中的text标签,但是在chrome中测试 var $el = $('<text y="-10" fill="#d10000" font-family="Verdana" font-size="20" text-anchor="start" transform="translate(389,269)" fuck-amchart="0">24.4%</text>'); $($0).after($el); 这样的代码是无法生效的,而只有这样的可以: $el = $($0).clone(); $el.attr('font-size', 32); $($0).after($el); 也就是说,用jquery创建的元素,是无法写入svg的,只能从svg中现有元素复制出来,然后修改的元素可以追加到svg中。 ...

August 28, 2012 · notsobad

make iso in mac os

一块u盘里是个系统镜像,我想把它写到iso文件中 wangxh@mac : ~/file$ mount /dev/disk0s2 on / (hfs, local, journaled) devfs on /dev (devfs, local, nobrowse) map -hosts on /net (autofs, nosuid, automounted, nobrowse) map auto_home on /home (autofs, automounted, nobrowse) /dev/disk1 on /Volumes/RamDisk (hfs, local, nodev, nosuid, noowners, mounted by wangxh) /dev/disk2s4 on /Volumes/GRMCULXFRER (msdos, local, nodev, nosuid, noowners) wangxh@mac : ~/file$ diskutil list /dev/disk0 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *320.1 GB disk0 1: EFI 209.7 MB disk0s1 2: Apple_HFS Macintosh HD 319.2 GB disk0s2 3: Apple_Boot Recovery HD 650.0 MB disk0s3 /dev/disk1 #: TYPE NAME SIZE IDENTIFIER 0: RamDisk *2.4 GB disk1 /dev/disk2 #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *4.2 GB disk2 1: Windows_FAT_32 GRMCULXFRER 4.2 GB disk2s4 /dev/disk2s4是U盘。直接dd会报错 ...

August 28, 2012 · notsobad

用bat来启动putty

putty连接实在是烦,建个bat来自动登录。 在putty中保存会话,填写名字、ip、登录用户名

August 28, 2012 · notsobad

learning android develop notes

琐碎记录 在layout xml中,元素如果需要在java中引用,就需要有android:id setContentView(R.layout.activity_main),即把res/layout/activity_main.xml载入 R.layout用来引用layout的元素,R.id用来引用所有的id res/values-fr, 是法语对应的目录 调用字符串:String hello = getResources().getString(R.string.hello_world) 模拟器中无法用键盘输入文字:编辑avd,在hardware中添加键盘支持 导入项目时,经常报“@Override annotation error (android prefs)”, 参考这个: ...

August 26, 2012 · notsobad