在Linux平台下我们可以利用2.6内核的inotify监控文件系统机制,通过rsync+inotify-tools+ssh实现触发式远程实时同步,即,当源目录下的文件或目录有变化时,会立即同步到目标目录。
yum install rsync inotify-tools
SRC=/data/webroot/admin.zhugexuetang/
DST=root@10.19.196.161:/data/webroot/admin.zhugexuetang/
inotifywait -mrq -e modify,delete,create,attrib ${SRC} | while read D E F
do
#rsync -az --delete --exclude='runtime' --exclude='.git' $SRC $DST
rsync -az --exclude='runtime' --exclude='.git' $SRC $DST
done
相关注解如下:
inotifywait -mrq -e modify,delete,create,attrib ${SRC} | while read D E F
-m 是保持一直监听
-r 是递归查看目录
-q 是打印出事件
-e create,move,delete,modify,attrib 是指 “监听 创建 移动 删除 写入 权限” 事件
rsync -azt --delete --exclude='runtime' --exclude='.git' $SRC $DST
-a 存档模式
-z 压缩文件数据在传输
-t 维护修改时间
-delete 删除于多余文件
要排除同步某个目录时,为rsync添加--exculde=PATTERN参数,注意,路径是相对路径,具体查看man rsync。
要排除某个目录的事件监听的处理时,为inotifywait添加--exclude参数,具体查看man inotifywait。
inotifywait 命令产生三个返回值,分别是“日期,时间,文件” 这3个返回值会做为参数传给read,因此脚本中的“while read D E F” 写法细化了返回值。
批量删除Key,Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作。
redis-cli keys "*" | xargs redis-cli del //如果redis-cli没有设置成系统变量,需要指定redis-cli的完整路径 //如:/opt/redis/redis-cli keys "*" | xargs /opt/redis/redis-cli del
redis-cli -a password keys "*" | xargs redis-cli -a password del
//下面的命令指定数据序号为0,即默认数据库 redis-cli -n 0 keys "*" | xargs redis-cli -n 0 del
//删除当前数据库中的所有Key flushdb //删除所有数据库中的key flushall
注:keys 指令可以进行模糊匹配,但如果 Key 含空格,就匹配不到了,暂时还没发现好的解决办法。
function setCookie(name, value) { var t = new Date(); t.setTime(t.getTime() + 30 * 24 * 3600 * 1000); document.cookie = escape(name) + "=" + escape(value) + ";path=/;expires=" + t.toGMTString(); }
function getCookie(name) { if (new RegExp("\\b" + name + "=([^;]+)", "g").test(document.cookie)) return unescape(RegExp.$1 || ''); return ''; }
在/home/www/.ssh/下新建config文件,内容如下:
Host git.zhongwenweilai.com
HostName git.zhongwenweilai.com
User www
Port 9000
IdentityFile ~/.ssh/id_rsa
ServerAliveInterval 30
Host web2
HostName 10.6.32.193
User www
Port 22
IdentityFile ~/.ssh/id_rsa
ServerAliveInterval 30
这样就可以通过ssh web2直接登录到 10.6.32.193 服务器了,当然需要通过ssh key认证。
如果遇到类似下面的错误:Bad owner or permissions on /home/yuss/.ssh/config
需要修改config的权限
chmod 600 ~/.ssh/config
在实际工作中遇到一个git方面的问题,git的ssh协议或git协议通过ssh链接git服务器,默认的端口是22,如果做了端口转发的话,可能默认的配置就连不上了,可以通过配置ssh config来解决这个问题。讲Host和HostName都设置成git的服务地址就可以了。
我有三台Ucloud的云主机,IP地址如下:
主机A:内网IP:10.6.14.98 外网弹性IP:42.62.79.183
主机B: 内网IP:10.6.13.86
主机C:内网IP:10.6.13.227
主机A可以通过外网弹性IP:42.62.79.183访问外网,但是主机B和主机C不可以访问外网,现在想让主机B和主机C通过主机A访问外网。具体操作如下:

需要加载下nf_conntrack模块,命令如下:
modprobe nf_conntrack
加载完后,需要再次执行sysctl -p
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#GATEWAY=10.6.0.1 GATEWAY=10.6.14.98