Android-Charts技术交流QQ群现已开通,欢迎加入。群号:170987350
Android-Charts技术社区网站http://faq.android-charts.com/

Linux使用sed命令对进行文件行操作

November 9th, 2018 No comments

1、删除文档的第一行
sed -i ‘1d’
2、删除文档的最后一行
sed -i ‘$d’
3、在文档指定行中增加一行
例如文档如下:
echo “1”;
echo “2”;
echo “4”;
echo “5”;
想要在echo “2”;后面加上一条echo “3”;可以用如下命令
sed -i ‘/echo “2”;/aecho “3”;’
之所以用分号,是因为文本中本来就有。也就是说分号不是必须的!
抽象出来就是: sed -i ‘/* /a*’
4、删除文件中的一行
sed -i ‘3d’
5、删除文件中包含某个关键字开头的所有行
sed -i ‘/^QWQ/d’
6、删除文件中包含某个关键字的所有行
sed -i ‘/QWQ/d’

Categories: 系统管理 Tags: ,

RQAlpha安装 ta-lib进行技术指标分析

November 9th, 2018 No comments

RQAlpha安装 ta-lib进行技术指标分析
RQAlpha安装时需要事先安装ta-lib否则Python引用时会出现错误

STEP1.使用 ta-lib 的源代码编译 ta-lib 的静态库

1
2
3
4
5
6
7
wget https://jaist.dl.sourceforge.net/project/ta-lib/ta-lib/0.4.0/ta-lib-0.4.0-src.tar.gz
tar xf ta-lib-0.4.0-src.tar.gz 
cd ta-lib
# 安装到/usr
./configure --prefix=/usr
make
sudo make install

注意这里需要指定安装位置,编译安装的ta-lib是32位版本,
如果不指定的话在64位操作系统下是无法在lib和/usr/lib下找到的

STEP2.使用pip安装ta-lib

1
pip install TA-Lib

参考
https://stackoverflow.com/questions/41155985/python-ta-lib-install-problems

CentOS7 使用SystemD实现开机自启动和服务管理

November 9th, 2018 No comments

CentOS7 可以在SystemD管理服务Service方式实现服务的自启动

SystemD即为System Daemon,是linux下的一种init软件,开发目标是提供
更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,
同时达到降低Shell的系统开销的效果。

这里假设需要启动

1
# /usr/share/autostartup/foobar.sh

STEP1.创建SystemD管理服务使用的.service文件

1
/usr/share/autostartup/foobar.service

以下是测试service文件,.service的具体编写,参考systemd相关文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[Unit]
Description=foobar
Documentation=http://www.doc.com/doc.html
After=network.target
 
[Service]
Type=simple
WorkingDirectory=/home/foobar
ExecStart=/usr/share/autostartup/foobar.sh
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=foobar
User=foobar
Group=foobar
Environment=
[Install]
WantedBy=multi-user.target

Read more…

Categories: 系统管理, 零敲碎打 Tags: ,

CentOS6 使用rc.local实现开机自启动

November 9th, 2018 No comments

CentOS6 可以在rc.local中增加启动shell脚本实现开启自启动

这里假设需要启动

1
/usr/share/autostartup/demo-service.sh

STEP1. 将需要开启启动的脚本设置为标记为可执行文件

1
chmod +x /usr/share/autostartup/demo-service.sh

STEP2. 执行如下命令将/etc/rc.d/rc.local文件标记为可执行文件

1
chmod +x /etc/rc.d/rc.local

CentOS7 中,/etc/rc.d/rc.local文件的权限被降低了,开机的时候执行在自己的脚本是不能起动一些服务的。

将需要执行的脚本写入到 /etc/rc.d/rc.local

1
echo/usr/share/autostartup/demo-service.sh” >> /etc/rc.d/rc.local
Categories: 系统管理, 零敲碎打 Tags: ,

CentOS使用run-as-user.sh处理运行环境的用户不同问题

November 9th, 2018 No comments

很多时候,部署运行环境的用户和实际运行的用户是不同的,
当因为环境限制,当时碰到以下场景的时候,就比较麻烦了,需要编写一个脚本来实现运行。
1.不能使用su和sudo时
2.用户没有shell不支持login时,比如nobody,服务用户
3.使用Docker等容器时
4.使用SSH远程执行命令,但是不能使用登陆用户

实现前提
1.需要运行用户的用户名和用户分组以及密码
2.需要运行用户的PUID和PGID

使用前请修改代码中实际运行的用户名,且用户存在

1
./run-as-user.sh 命令 命令参数

Read more…

Categories: 系统管理, 零敲碎打 Tags: , ,

CentOS一键编译安装 NodeJS脚本

November 9th, 2018 No comments

如题 CentOS一键编译安装 NodeJS脚本,使用NodeJS源代码编译,适用于CentOS和Debian,
默认安装的Nodejs版本已经老掉牙了
脚本支持选择node的版本和prefix
两个编译变量
NODE_VERSION=v8.11.3
NODE_PREFIX=/usr/local

使用了系统vCPU数量来控制NPROC数量,支持各种虚拟机的情况
NPROC=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || 1)
对于物理机编译安装,建议按实际CPU数量*单个CPU核心数量进行参数设置

另外使用国内的taobao作为NPM的第一来源镜像。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
 
#!/bin/bash
 
##############################################################################
# Build develop enviroment for running npm and nodejs
#
# version="1.0.0" 
# node="v8" 
# os="CentOS v7.4" 
# user=“dev”
# description="Node v8 compiled from source running on CentOS v7.4"
##############################################################################
 
##############################################################################
# If is root
##############################################################################
if [ "$(whoami)" != 'root' ]; then
echo "install need root user"
exit
fi
 
##############################################################################
# Export enviroment variant
##############################################################################
export TERM=xterm
export NLS_LANG=American_America.AL32UTF8
export LANG=C        # C.UTF-8
export LANGUAGE=C    # C.UTF-8
export LC_ALL=C      # C.UTF-8
export TIMEZONE=Asia/Shanghai
 
##############################################################################
# Build variant
##############################################################################
NODE_VERSION=v8.11.3
NODE_PREFIX=/usr/local
 
##############################################################################
# Setup build enviroment
##############################################################################
yum -y update
yum -y install \
    ca-certificates \
    gcc \
    gcc-c++ \
    gnupg \
    libgcc \
    libstdc++ \
    kernel-headers \
    openssl \
    openssl-devel \
    mercurial \
    subversion \
    git
##############################################################################
# Install Node & NPM
##############################################################################
 
# Download and validate the NodeJs source
for key in \
    94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
    FD3A5288F042B6850C66B31F09FE44734EB7990E \
    71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
    DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
    C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
    B9AE9905FFD7803F25714661B63B535A4C206CA9 \
    56730D5401028683275BD23C23EFEFE93C4CFFFE \
; do \
    gpg --keyserver pgp.mit.edu --recv-keys "$key"|| \
    gpg --keyserver keyserver.pgp.com --recv-keys "$key" || \
    gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" ; \
done
 
mkdir /node_src 
cd /node_src
curl -o node-${NODE_VERSION}.tar.gz -sSL https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}.tar.gz
curl -o SHASUMS256.txt.asc -sSL https://nodejs.org/dist/${NODE_VERSION}/SHASUMS256.txt.asc
gpg --verify SHASUMS256.txt.asc
grep node-${NODE_VERSION}.tar.gz SHASUMS256.txt.asc | sha256sum -c -
 
# Compile and install
cd /node_src
tar -zxf node-${NODE_VERSION}.tar.gz
cd node-${NODE_VERSION}
./configure --prefix=${NODE_PREFIX}
#./configure
NPROC=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || 1) 
make -j${NPROC}
make install
 
# Set PATH enviroment variant
export PATH=${PATH}:${NODE_PREFIX}/bin
# Add the environment variable to /etc/profile
echo "export PATH=${PATH}:${NODE_PREFIX}/bin" >> /etc/profile
 
##############################################################################
# Install Package use NPM
##############################################################################
npm config set unsafe-perm true \
npm config set strict-ssl false \
npm config set registry https://registry.npm.taobao.org 
# npm config set proxy http://xx@xx.com:xxxx
# npm config set https-proxy=http://xx@xx.com:xxxx
 
# Install node packages
npm install -g \
    gulp-cli \
    grunt-cli \
    markdown-styles \
    yarn
 
##############################################################################
# Setup users
##############################################################################
 
groupadd dev
useradd -s /bin/bash -g dev dev
echo "dev:password" | chpasswd
 
##############################################################################
# Clean up
##############################################################################
find ${NODE_PREFIX}/lib/node_modules/npm -name test -o -name .bin -type d | xargs rm -rf
rm -rf \
    /node_src \
    /tmp/* \
    /var/cache/yum/* \
    ${NODE_PREFIX}/lib/node_modules/npm/man \
    ${NODE_PREFIX}/lib/node_modules/npm/doc \
    ${NODE_PREFIX}/lib/node_modules/npm/html

Mybatis映射BigDecimal问题

November 9th, 2018 No comments

Mybatis映射数据库类型中使用numberic和decimal时,
如果需要使用String进行数据传递但是小数位很长或者整数位很长的话
Mybatis会把数据映射成BigDecimal来处理
但是如果Mybatis会傻傻的使用.toString()来转换,结果可能会被转成科学记数法
今天某数据库存储的超长订单号就出现了这个问题,不说了,我去改代码了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// MyBatis的做法,直接调用Bigdecmal的.toString()
// 浮点数的打印时正常
new BigDecimal("10000000000").toString()
// >>10000000000
 
// 普通的数字字符串,没关系,我们发誓订单号不会超过限度,用数字类型没关系
new BigDecimal("100.000").toString()
// >>100.000
 
// 去除末尾多余的0,我们用了保留订单号,订单号用123开头,然后补0,
new BigDecimal("100.000").stripTrailingZeros().toString()
// >>1E+2
 
// 避免输出科学计数法, 这才是正确的做法,MyBatis怎么搞得,这点转换都不做,MyBatis还能干啥?
new BigDecimal("100.000").stripTrailingZeros().toPlainString()
// >>100
Categories: 语言编程 Tags: ,