Press "Enter" to skip to content

月与灯依旧 Posts

Shell处理json数据

Shell处理json数据的方法,简单介绍一下,本文基于CentOS 7 64bit。

yum install jq                     #需要EPEL源

下面我们有一个config.json文件

{
  "USERNAME": "admin",
  "CLUSTERMAP_HOSTS": {
      "staging":{
          "pc": "10.191.130.70",
          "app": "10.191.76.250",
          "wx": "172.28.172.171"
      },
      "production":{
          "mjq_pc":"172.28.139.30",
          "mjq_app":"172.28.148.150",
          "mjq_weixin":"172.28.149.84",
          "mjq_qq":"172.28.149.77",
          "lf_pc":"172.20.145.51",
          "lf_app":"172.20.145.40",
          "lf_weixin":"172.20.145.86",
          "lf_qq":"172.20.112.150",
          "jos":"172.20.145.50",
          "lf_coupon":"172.20.112.44",
          "mjq_coupon":"172.28.139.48"
      },
      "ab":{
          "mjq_pc":"172.28.175.36",
          "lf_app":"172.20.121.107"
      }
  },
  "CLUSTERMAP_BINARY_PATH": "/export/App/helloworld/clustermap/bin"
}
获得某1个key的value
$ jq '.CLUSTERMAP_HOSTS.production' config.json 
{
  "mjq_pc": "172.28.139.30",
  "mjq_app": "172.28.148.150",
  "mjq_weixin": "172.28.149.84",
  "mjq_qq": "172.28.149.77",
  "lf_pc": "172.20.145.51",
  "lf_app": "172.20.145.40",
  "lf_weixin": "172.20.145.86",
  "lf_qq": "172.20.112.150",
  "jos": "172.20.145.50",
  "lf_coupon": "172.20.112.44",
  "mjq_coupon": "172.28.139.48"
}


$ jq '.CLUSTERMAP_HOSTS.production.mjq_pc' config.json
"172.28.139.30"
获得某些(多个)key的value
$ jq '.CLUSTERMAP_HOSTS | .production, .ab' config.json 
{
  "mjq_pc": "172.28.139.30",
  "mjq_app": "172.28.148.150",
  "mjq_weixin": "172.28.149.84",
  "mjq_qq": "172.28.149.77",
  "lf_pc": "172.20.145.51",
  "lf_app": "172.20.145.40",
  "lf_weixin": "172.20.145.86",
  "lf_qq": "172.20.112.150",
  "jos": "172.20.145.50",
  "lf_coupon": "172.20.112.44",
  "mjq_coupon": "172.28.139.48"
}
{
  "mjq_pc": "172.28.175.36",
  "lf_app": "172.20.121.107"
}
获得key列表
Leave a Comment

关于美元汇率, 做了个有意思的比较

2015.12.31当天汇率为1美元=6.4893人民币元, 即1万美元=64893人民币元;

2016.12.12当天汇率为1美元=6.9045人民币元, 即1万美元=69045人民币元;

假设在2015.12.31花费64893人民币购买了1万美元, 年收益为x
(1+x)*64893=69045,则x=0.064
即, 购买美元, 相当于购买了一个年收益6.4%的理财产品(完全无风险);

这里还没有计算美元的利息, 如果计算在其中, 那么收益会更高.

最后, 本文是胡说八道的, 请勿相信本文.

Leave a Comment

解决swapper: page allocation failure. order:4, mode:0x20

一般在小内存的机器上会遇到这样的问题,这里附上解决办法

先看一下系统设置

$ cat /proc/sys/vm/zone_reclaim_mode
0

$ cat /proc/sys/vm/min_free_kbytes
1433

解决办法:

$ sysctl -w vm.zone_reclaim_mode=1
#当区域内存不足时允许使用内存回收,此项默认被禁用,因为对服务器来说,Cache非常重要

$ sysctl -w vm.min_free_kbytes=2048
#告诉内核随时保持2M的内存空闲
#当可用内存低于这个参数时, 系统开始回收Cache内存, 以释放内存, 直到可用内存大于这个值
#值越高, 内核越早开始回收内存, 空闲内存越高
#设定这个参数时请小心, 因为该值过低和过高都有问题
#太低可防止系统重新利用内存, 这可导致系统挂起并让 OOM 杀死多个进程
#将这个参数值设定太高(占系统总内存的 5-10%)会让您的系统很快会内存不足
#Linux 的设计是使用所有可用 RAM 缓存文件系统Cache. 该值设定太高的结果是在该系统中花费太多时间重新利用内存
#默认值:
 * 16MB:    512k 
 * 32MB:    724k 
 * 64MB:    1024k 
 * 128MB:   1448k 
 * 256MB:   2048k 
 * 512MB:   2896k 
 * 1024MB:  4096k 
 * 2048MB:  5792k 
 * 4096MB:  8192k 
 * 8192MB:  11584k 
 * 16384MB: 16384k 

$ echo 'vm.zone_reclaim_mode = 1' >> /etc/sysctl.conf
$ echo 'vm.min_free_kbytes = 2048' >> /etc/sysctl.conf

然后可以确认一下

cat /proc/sys/vm/zone_reclaim_mode
1
cat /proc/sys/vm/min_free_kbytes
2048

参考文档
内核参数Zone_reclaim_mode介绍
内存域水印值:min_free_kbytes

Leave a Comment

使用命令/脚本增加/删除crontab项

使用命令/脚本增加/删除crontab项,记录一下吧.

一, 删某一项cron任务

方法1(仅适用root,不推荐)
修改/var/spool/cron/root文件

这个方法有以下问题:
1, 只有root用户可以修改,其它用户均没有权限,因为/var/spool/cron这个目录的属主及属组均是root,且目录权限是700, 因此其它用户没有权限进入此目录去修改自己的/var/spool/cron/username文件.

方法2
如果某个用户要删除自己的cron任务, 那么只需要执行

crontab -l

crontab -l | grep -v 'config-edit.163.com/config_dir/newsyn' | crontab -

crontab -l | grep -v 'tomcatRoot/jd_product/data/jd_product.txt' | crontab -

如果root需要删除某个用户的cron任务, 那么

crontab -u USERNAME -l

crontab -u USERNAME -l | grep -v 'config-edit.163.com/config_dir/newsyn'  | crontab -u USERNAME -

crontab -u USERNAME -l | grep -v 'tomcatRoot/jd_product/data/jd_product.txt'  | crontab -u USERNAME -

提示: -u参数仅有root可以调用.

也可以这么做

crontab -l | grep -v 'config-edit.163.com/config_dir/newsyn' > cron.base
crontab cron.base
Leave a Comment

使用SSH反向隧道进行内网穿透

1,前提条件

环境 系统类型 本地用户 SSH服务端口
A机位于公司的NAT网络 安装在VMware里的Debian 8 64bit虚拟机 userA 22
B机是一台有公网IP的VPS CentOS 6 64bit userVPS 1022
C机位于家庭的NAT网络 Windows系统

实现目的:使得位于家庭NAT网络内的C机,可以SSH访问位于公司NAT网络内的A机。

2,原理分析
这里先讲向SS反向隧道的原理,如果你对原理不感兴趣,可以跳过这一节。

$ ssh -p 22 -qngfNTR 6766:127.0.0.1:22 usera@VPS的IP  #回车以后没有反应是正常的,隧道已经建立

命令解析:
从(位于本地NAT网络里的)本机访问VPS,建立一条SSH隧道(本机的随机端口到VPS的22端口)
同时建立了一条反向隧道,将VPS上的6766端口转发到本机的22端口。

然后,就可以从VPS的6766端口访问本地的22端口了

$ ssh -p 6766 [email protected]  #从SSH访问位于NAT网络里的linux机器

从SSH访问位于本地NAT网络里的linux机器,这里的userA当然是本地NAT网络里的linux机器用户啦。

这样做有一个问题,那就是,由本地建立的SSH连接是会超时关闭的,如果连接关闭,隧道无法维持,那么VPS就无法利用反向隧道访问本地NAT网络了,为此我们需要一种方案来提供一条稳定的SSH反向隧道,于是autossh就派上用场了;

另外有个问题是,如果本地的Linux系统重启,那么autossh建立的隧道仍然会失效。所以这里我们采取的做法是:
1,将本地Linux系统的public key发给VPS,建立信任机制,这样,本地Linux系统可以无需VPS的密码而建立一条SSH隧道;
2,将autossh写入系统服务,使之在开机时可以自动建立SSH隧道。

Leave a Comment

PhotoShop CS2下载地址

PhotoShop CS2免费了,但Adobe的官网很难找到PhotoShop CS2的下载地址。这里总结一下吧。

PhotoShop CS2下载地址:
地址一
地址二(可选Windows及MAC版本)
地址三
直接下载地址

PhotoShop CS2中文语言包下载地址
地址一
官方下载列表(包括其它语言的)
官方下载页面
注意:如果使用官方的中文语言包, 请确保你的PS安装目录位于C:\Program Files\Adobe\Adobe Photoshop CS2(不能是C:\Program Files (x86)目录), 否则请不要使用官方中文语言包.

PhotoShop CS2汉化补丁下载地址
PConline下载地址(推荐!需要安装到PS目录下的Required目录)

Windows Serial number: 1045-1412-5685-1654-6343-1431
Mac OS X Serial number: 1045-0410-5403-3188-5429-0639

Leave a Comment

Debian 8 64bit安装teamviewer

Debian 8安装teamviewer的过程, 一波三折. 安装过程中肯定会许多许多的错误, 例如提示不支持i386架构等等, 其实官方都给出了详细的说明.

For 32-bit DEB-systems you need the teamviewer_i386.deb package.

For 64-bit DEB-systems without Multiarch you need the teamviewer_amd64.deb package. Please see note on Multiarch below.

For installing TeamViewer, we recommend using the graphical installer.

If you prefer to use the command line or if there is no graphical installer available you can use either one of these commands as an administrator:

For the 32-bit/64-bit Multiarch package:

dpkg -i teamviewer_11.0.xxxxx_i386.deb

For the 64-bit without Multiarch package:

dpkg -i teamviewer_11.0.xxxxx_amd64.deb

In case “dpkg” indicates missing dependencies, complete the installation by executing the following command:

apt-get install -f
Leave a Comment