Author Archives: cybmp3

pypi pip

curl -O https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py

 

linux下LVM VG 名字一样

vgdisplayQQ图片20160617092555

然后记录需要改名的UUID

vgrename -v 5Qh76O-7HGF-joQe-wwbC-U4RH-Yj12-8jBK9k sblsyhhd
QQ截图20160617092728

Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式

Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式,按天存放,解决catalina.out日志文件过大问题

1. 准备jar包:

log4j-1.2.17.jar (从 http://www.apache.org/dist/logging/log4j/1.2.17/ 下载)

tomcat-juli.jar, tomcat-juli-adapters.jar (从 http://www.apache.org/dist/tomcat/tomcat-7/v7.0.52/bin/extras/ 下载,根据你的Tomcat版本选择对应的分支)

2. 将上面的三个jar包拷贝到 Tomcat 的 lib 目录下;

3. 将 tomcat-juli.jar 拷贝到 Tomcat 的 bin 目录下,替换原有的jar包;

4. 修改 Tomcat 的 conf/context.xml 文件,将

(增加 swallowOutput="true" 的属性配置,只有这样才能完全的把tomcat的stdout给接管过来。这一步很关键 在官网及网上找了许多资料都没有提及。);

5. 删除 Tomcat 的 conf/logging.properties 文件(或者重命名-建议);

6. 在 Tomcat 的 lib 目录下创建 log4j.properties 文件:

log4j.rootLogger=INFO, CATALINA

# Define all the appenders
log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File=${catalina.base}/logs/catalina.
log4j.appender.CATALINA.Append=true
log4j.appender.CATALINA.Encoding=UTF-8
# Roll-over the log once per day
log4j.appender.CATALINA.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.LOCALHOST=org.apache.log4j.DailyRollingFileAppender
log4j.appender.LOCALHOST.File=${catalina.base}/logs/localhost.
log4j.appender.LOCALHOST.Append=true
log4j.appender.LOCALHOST.Encoding=UTF-8
log4j.appender.LOCALHOST.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.MANAGER=org.apache.log4j.DailyRollingFileAppender
log4j.appender.MANAGER.File=${catalina.base}/logs/manager.
log4j.appender.MANAGER.Append=true
log4j.appender.MANAGER.Encoding=UTF-8
log4j.appender.MANAGER.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.HOST-MANAGER=org.apache.log4j.DailyRollingFileAppender
log4j.appender.HOST-MANAGER.File=${catalina.base}/logs/host-manager.
log4j.appender.HOST-MANAGER.Append=true
log4j.appender.HOST-MANAGER.Encoding=UTF-8
log4j.appender.HOST-MANAGER.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding=UTF-8
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

# Configure which loggers log to which appenders
# Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=INFO, LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]=\
INFO, MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]=\
INFO, HOST-MANAGER

nginx location

location = / {
# 精确匹配 / ,主机名后面不能带任何字符串
[ configuration A ]
}

location / {
# 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
# 但是正则和最长字符串会优先匹配
[ configuration B ]
}

location /documents/ {
# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
[ configuration C ]
}

location ~ /documents/Abc {
# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
[ configuration CC ]
}

location ^~ /images/ {
# 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
[ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
# 匹配所有以 gif,jpg或jpeg 结尾的请求
# 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则
[ configuration E ]
}

location /images/ {
# 字符匹配到 /images/,继续往下,会发现 ^~ 存在
[ configuration F ]
}

location /images/abc {
# 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在
# F与G的放置顺序是没有关系的
[ configuration G ]
}

location ~ /images/abc/ {
# 只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用
[ configuration H ]
}

location ~* /js/.*/\.js

已=开头表示精确匹配
如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。
^~ 开头表示uri以某个常规字符串开头,不是正则匹配
~ 开头表示区分大小写的正则匹配;
~* 开头表示不区分大小写的正则匹配
/ 通用匹配, 如果没有其它匹配,任何请求都会匹配到

顺序 no优先级:
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)

上面的匹配结果
按照上面的location写法,以下的匹配示例成立:

/ -> config A
精确完全匹配,即使/index.html也匹配不了
/downloads/download.html -> config B
匹配B以后,往下没有任何匹配,采用B
/images/1.gif -> configuration D
匹配到F,往下匹配到D,停止往下
/images/abc/def -> config D
最长匹配到G,往下匹配D,停止往下
你可以看到 任何以/images/开头的都会匹配到D并停止,FG写在这里是没有任何意义的,H是永远轮不到的,这里只是为了说明匹配顺序
/documents/document.html -> config C
匹配到C,往下没有任何匹配,采用C
/documents/1.jpg -> configuration E
匹配到C,往下正则匹配到E
/documents/Abc.jpg -> config CC
最长匹配到C,往下正则顺序匹配到CC,不会往下到E

实际使用建议

所以实际使用中,个人觉得至少有三个匹配规则定义,如下:
#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
location = / {
proxy_pass http://tomcat:8080/index
}
# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
root /webroot/res/;
}
#第三个规则就是通用规则,用来转发动态请求到后端应用服务器
#非静态文件请求就默认是动态请求,自己根据实际把握
#毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了
location / {
proxy_pass http://tomcat:8080/
}

http://tengine.taobao.org/book/chapter_02.html
http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

rsync

rsync服务端配置
启动配置

选择rsync服务器启动方式

rsync服务器负载比较高,则使用独立启动模式
rsync服务器负责较低,使用xinetd运行方式
创建配置文件rsyncd.conf
对于非匿名方式访问的rsync服务器创建配置口令(建议配置需要口令访问)

CentOS 默认以xinetd模式运行rsync,rsync的xinetd配置文件是/etc/xinetd.d/rsync
如果配置rsync以xinetd模式运行,执行如下命令

chkconfig rsync on
service xinetd restart
# 如果执行 service xinetd restart 发现 xinetd: unrecognized service 则未安装xinetd服务
# 执行 yum install xinetd 安装 xinetd服务
# 安装之后启动 xinetd服务(service xinetd start)

编辑rsync的xinetd配置文件/etc/xinetd.d/rsync文件,修改参数 server_args = --daemon --config=/etc/rsyncd/rsyncd.conf 可以配置rsync服务器启动时的参数

如果使用独立运行模式,则执行如下命令

/usr/bin/rsync --daemon
#编辑 /etc/rc.local文件 加入 /usr/bin/rsync --daemon 保证每次开机启动都会自动启动rsync服务

配置文件

# 创建rsync服务目录
mkdir /etc/rsyncd
# 创建配置文件
touch /etc/rsyncd/rsyncd.conf
# 创建密码文件
touch /etc/rsyncd/rsyncd.passwd
#权限修改
chown root:root /etc/rsyncd/rsyncd.passwd
chmod 600 /etc/rsyncd/rsyncd.passwd

配置文件语法介绍

模块
以[模块名称]开始
参数配置行
格式 name = value
其中 value的值可以是string(可以不使用引号)或者boolean(0/1,true/false,yes/no)
以#开始是注释行
以\是续行符

全局参数([模块名称]之外的配置均为全局配置)

address
在独立运行时,用于指定的服务器运行的 IP 地址。由 xinetd 运行时将忽略此参数,使用命令行上的 –address 选项替代
默认值 本地所有IP
port
指定 rsync 守护进程监听的端口号。 由 xinetd 运行时将忽略此参数,使用命令行上的–port 选项替代。
默认值是 873
motd file
指定一个消息文件,当客户连接服务器时该文件的内容显示给客户。
默认值无
pid file
rsync 的守护进程将其 PID 写入指定的文件。
默认值 无
log file
指定 rsync 守护进程的日志文件,而不将日志发送给 syslog。
默认值 无
syslog facility
指定 rsync 发送日志消息给 syslog 时的消息级别
默认值 daemon
socket options
指定自定义 TCP 选项。
默认值无

模块参数
模块参数主要用于定义 rsync 服务器哪个目录要被同步。模块声明的格式必须为 [module] 形式,这个名字就是在 rsync 客户端看到的名字,类似于 Samba 服务器提供的共享名。而服务器真正同步的数据是通过 path 来指定的。可以根据自己的需要,来指定多个模块,模块中可以定义以下参数:

基本模块参数

path
指定当前模块在 rsync 服务器上的同步路径,该参数是必须指定的
comment
给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户

模块控制参数
use chroot
若为 true,则 rsync 在传输文件之前首先 chroot 到 path 参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要 root 权限,并且不能备份指向 path 外部的符号连接所指向的目录文件。
默认值true
uid
指定该模块以指定的 UID 传输文件。
默认值 nobody
gid
指定该模块以指定的 GID 传输文件。
默认值 nobody
max connections
定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。
默认值 0 不限制
read only
指定是否允许客户上传文件。若为 true 则不允许上传;若为 false 并且服务器目录也具有读写权限则允许上传。
默认值 true
write only
指定是否允许客户下载文件。若为 true 则不允许下载;若为 false 并且服务器目录也具有读权限则允许下载。
默认值 false

模块认证参数
hosts allow
用一个主机列表指定哪些主机客户允许连接该模块。不匹配主机列表的主机将被拒绝
默认值 *

客户主机列表定义可以是以下形式:

单个IP地址 例如:192.168.0.1
整个网段 例如:192.168.0.0/24,192.168.0.0/255.255.255.0
可解析的单个主机名 例如:centos,centos.bsmart.cn
域内的所有主机 例如:.bsmart.cn
“”则表示所有。
多个列表项要用空格间隔。

hosts deny
用一个主机列表指定哪些主机客户不允许连接该模块。
默认值 空
auth users
指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。用户名和口令以明文方式存放在 secrets file 参数指定的文件中
默认匿名
secrets file
指定一个 rsync 认证口令文件。只有在 auth users 被定义时,该文件才起作用。
默认值 空
strict modes
指定是否监测口令文件的权限。若为 true 则口令文件只能被 rsync 服务器运行身份的用户访问,其他任何用户不可以访问该文件。
默认值 true
> - rsync 认证口令文件的权限一定是 600,否则客户端将不能连接服务器。
rsync 认证口令文件中每一行指定一个 用户名:口令 对,格式为:username:passwd
一般来说口令最好不要超过8个字符。若您只配置匿名访问的 rsync 服务器,则无需设置上述参数。

配置文件实例

# GLOBAL OPTIONS
uid = root
gid = root

use chroot = no

read only = yes

#limit access to private LANs
hosts allow=172.16.0.0/255.255.0.0 192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0
hosts deny=*
max connections = 5

pid file = /var/run/rsyncd.pid

secrets file = /etc/rsyncd/rsyncd.secrets
#lock file = /var/run/rsync.lock

#motd file = /etc/rsyncd/rsyncd.motd

#This will give you a separate log file
#log file = /var/log/rsync.log

#This will log every file transferred - up to 85,000+ per user, per sync
transfer logging = yes

log format = %t %a %m %f %b
syslog facility = local3
timeout = 300

# MODULE OPTIONS
[davidhome]
path = /home/david/
list=yes
ignore errors
auth users = david
comment = David home
exclude = important/

[chinatmp]
path = /tmp/china/
list=no
ignore errors
auth users = china
comment = tmp_china

密码文件

david:asdf #格式 用户名:口令
china:jk #该用户不要求是系统用户

查看rsync服务是否启动
netstat -an | grep 873
rsync 客户端

# 安装客户端
yum -y install rsync
# 同步命令
# -a 参数,相当于-rlptgoD
# -r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限
# -t 保持文件原有时间;-g 保持文#件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件
# -z 传输时压缩;
# -P 传输进度;
# -v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;
# 同步
rsync -avzP [email protected]::davidhome /tmp/david/
# 客户端数据和服务器端数据保持一致
rsync -avzP --delete [email protected]::davidhome /tmp/david/
# 指定传输时候的密码文件,密码文件权限 600
rsync -avzP --delete --password-file=/tmp/rsync.password [email protected]::davidhome /tmp/david/

centos 7 firewalld常用命令

http://blog.xdq.me/centos-7-firewalldchang-yong-ming-ling/

将ip添加到zone

sudo firewall-cmd --permanent --zone=work --add-source=192.168.0.0/24

将某个网口添加到zone

sudo firewall-cmd --permanent --zone=work --add-interface=eth0

在某个zone打开端口

sudo firewall-cmd --permanent --zone=work --add-port=8080-8090/tcp

永久打开一个端口

firewall-cmd --permanent --add-port=8080/tcp

永久关闭一个端口

firewall-cmd --permanent --remove-port=8080/tcp

永久打开某项服务

firewall-cmd --permanent --add-service=http

永久关闭某项服务

firewall-cmd --permanent --remove-service=http

进行端口转发

firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.0.2.55

允许转发到其他地址

firewall-cmd --permanent --add-masquerade

重新加载防火墙

firewall-cmd --reload

chrome 原版下载

ChromeSetup

xshell5 & xftp5&notepad++ download

Xshell5

Xftp5

npp.6.9.2.Installer

what is ffmpeg user-agent?

user-agent = libavformat vesion=Lavf/XXXX

QQ截图20160515034154

centos7 安装 docker

 

  • 添加docker源。
     cat >/etc/yum.repos.d/docker.repo <<-EOF
    [dockerrepo]
    name=Docker Repository
    baseurl=https://yum.dockerproject.org/repo/main/centos/7 
    enabled=1 
    gpgcheck=1 
    gpgkey=https://yum.dockerproject.org/gpg 
    EOF
  • 使用yum命令安装docker。
    $ sudo yum install docker-engine 

 

  • 启动docker服务。
    $ sudo service docker start

下载 ubuntu trusty

$ docker pull ubuntu:trusty

 

以交互命令运行

$ docker run -i -t library/ubuntu:trusty /bin/bash

先UPDATE一下

安装SSH终端服务器,便于我们外部使用SSH客户端登陆访问

[[email protected] /]# yum install passwd openssl openssh-server -y

启动sshd:
# /usr/sbin/sshd -D
这时报以下错误:
[[email protected] b5926410fe60 /]# /usr/sbin/sshd
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key 


执行以下命令解决:
[[email protected] /]# ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''    
[[email protected] /]#  ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
[[email protected] /]# ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key  -N '' 

yum install passwd
passwd


 

获取到刚才操作的实例容器ID

#docker ps -l
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS                      PORTS               NAMES
fceac2533703        library/ubuntu:trusty   "/bin/bash"         24 minutes ago      Exited (0) 36 seconds ago                       adoring_murdock

以后台进程方式长期运行此镜像实例:

docker run -d -p 22 -p 2333:2333  learn/tutorial /usr/sbin/sshd -D