10.32/10.33 rsync通过服务同步
这种方式,可以理解为在远程主机上建立一个rsync服务器,在服务器上配置好rsync的各种应用,然后本机作为 rsync 的一个客户端去连接远程的rsync服务器。
如何配置一台rsync服务器。
[root@wangbin ~]# vi /etc/rsyncd.conf 可自定义名称,如果是rsyncd.conf系统会自动加载
port=873
log file=/var/log/rsync.log
pid file=/var/run/rsync.pid
address=192.168.247.129
【指定哪个端口启动 rsync 服务,默认873】
【指定日志文件】
【指定pid文件,涉及到服务启动以及停止等进程管理操作】
【指定启动 rsync 服务的IP,多个IP用逗号隔开,如有多个IP,指定其中一个启动rsync 服务,默认在全部IP上启动,不写的话,监听所有IP,注意这里是指服务器的IP】
[test]
path=/root/rsync
use chroot=true
max connections=4
read only=false
list=true
uid=root
gid=root
auth users=test
secrets file=/etc/rsyncd.passwd
hosts allow=192.168.247.132
○ 【指定模块名,可以自定义】
○ 【指定数据存放路径】
○ 【默认true,有false选项,在传输文件之前首先 chroot 到 path参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要root权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下 true,如果数据中有软连接文件在其他目录下的话,建议设置成false,设置成true后,只能在上面定义的目录下拷贝上传文件】
○ 【最大连接数,默认0没有限制】
○ 【true 不能上传到该模块指定的路径下】【只读模式(下载模式) ,只允许客户端下载,不允许上传,适合一对多的同步方式,如果多对一,改成no】
○ 【指定当用户查询该服务器上的可用模块时,该模块是否被列出,true列出,false隐藏】
○ 【指定传输文件时,以哪个用户主的身份传输】
○ 【以哪个所属组的身份传输】
○ 【指定传输时使用的用户名】
○ 【指定密码文件,该参数连同上面的参数如果不指定则不使用密码验证,注意该密码文件的权限一定要是600】
○ 【指定被允许连接该模块的主机,可以是IP或者网段,如果是多个,直接用空格隔开】
一次只能运行一个配置文件,如果想运行多个模块,将多个模块下载同一个配置文件中。
配置文件分为两部分,全部配置部分和模块配置部分,全局部分就是几个参数,自定义模块名 [test]为分界,上面写的是全局部分,下面的都是模块部分。
一个配置文件可以有多个配置模块,模块名自定义,格式如 rsyncd.conf 所示。模块中的参数如 use chroot,max connections,uid,gid,auth users,secrets file 以及 hosts allow 都可以配置成全局参数。可以通过 man rsync.conf 查看更多参数和信息。
# rsync --daemon 【启动rsync进程】
[root@wangbin ~]# cat /etc/rsyncd.passwd
test:test123 【test 的密码是 test123】
[root@wangbin ~]# chmod 600 /etc/rsyncd.passwd 【修改secrets file 权限】
[root@wangbin ~]# rsync --daemon --config=/etc/rsyncd.conf 【启动rsync服务,结合上面创建的配置文件目录】
[root@wangbin ~]# cat /var/log/rsync.log 【启动后,查看日志,检查是否启动】
2017/02/19 06:32:41 [1237] rsyncd version 3.0.6 starting, listening on port 873
[root@wangbin ~]# netstat -lnp |grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1237/rsync
tcp 0 0 :::873 :::* LISTEN 1237/rsync
如果想开机启动,把命令 rsync --daemon --config=/etc/rsyncd.conf 写到/etc/rc.d/rc.loacl 文件内。然后去另一台机器测试。
格式说明 rsync -avL test@192.168.247.129::test/test1 /tmp/test5/
第一个test是配置文件中的auth users,第二个test是配置文件中定义的模块名[test]
[root@thinkpad ~]# rsync -avL test@192.168.247.129::test/test1 /tmp/test5/
Password:
@ERROR: auth failed on module test
rsync error: error starting client-server protocol (code 5) at main.c(1503) [receiver=3.0.6]
出现这种情况,说明前期的搭建过程没有问题,客户端可以连接服务器,失败的原因可能有几个。
1、密码错误
2、secrets file 的格式错误
name:passwd
3、配置文件写错,字母顺序
4、passwd权限问题
5、secrets file文件拥有者与rsync运行者
服务端rsync服务是以什么用户运行,则必须保证secrets file文件拥有者必须是同一个 假设root运行rsync --daemon,则secrets file的owner也必须是root
6、如果是以--password-file=file的方式附带密码
确保客户端密码文件格式无误,与服务端的密码文件不同,
客户端的不用加上用户名,即直接是 123456
7、可以尝试使用本地存在的用户名作为auth users
这个是在网上看到的,没实践过,不过如果都没办法,可尝试一下,
密码不要跟本地用户的系统密码一样就行了。
[root@thinkpad ~]# rsync -avL test@192.168.247.129::test/test1 /tmp/test5/
Password:
receiving incremental file list
rsync: link_stat "/test1" (in test) failed: No such file or directory (2)
sent 4 bytes received 6 bytes 2.86 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1505) [receiver=3.0.6]
/etc/rsyncd.conf 配置文件中的 path 路径,是rsync后台传输数据的路径path=/root/rsync ,如果文件放在 /etc/rsync而不是/root/rsync里面,则会有这样的提示。
免密登陆
客户端上面,编辑一个pass文件,如/etc/pass,登陆的时候就可以免密码登陆服务端。
#vim /etc/pass 一定是在客户机上面建立密码文件
写入test的密码
#cat !$
test123
#rsync -avL test@192.168.247.129::test/test1/ /tmp/test8/ --password-file=/etc/pass
此时便不再需要密码
password file must not be other-accessible【报错提示权限太大,密码文件不能被他人读取】
continuing without password file
#chmod 700 /etc/pass 【最好改成400】
关于配置文件中的list
#rsync 192.168.247.136:: 【列出模块名字】
如果list是yes,则可以列出模块名,不是很安全。可以设置成no。这样便不会暴露模块名。
配置文件中的port
#rsync --port 8730 【如果配置文件指定了port,用--port指定】
配置文件中的 use chroot
rsyncd.conf中有一个配置use chroot=true,表示什么意思呢?
A 把用户限定在远程的某个目录下
B 如果要同步的目录下有软链接文件,并且该软链接指向的目标文件在另外一个目录里(path定义的目录外),那么当我们使用-L选项时就不成功了
C 这个选项提高了安全性
10.34 linux系统日志
系统大部分的配置文件路径,都可以再这个里面找到。
配置文件/etc/rsyslog.conf,该配置文件主要信息为:记录哪些服务和需要记录什么等级的信息。日常工作中,遇到服务或者系统的错误或者故障,查看日志都是排查故障最常用的方法。
多关注日志中的erro,cri等信息,error错误,crisis危机。
日志格式:
auth pam产生的日志
authpriv ssh,ftp等登陆信息的验证信息
cron 时间任务相关
kern 内核
lpr 打印
mail 邮件
mark(syslog) rsyslog服务内部的信息,时间标识
news 新闻组
user 用户程序产生的相关信息
uucp unix to unix copy, unix主机之间相关的通讯
local 1~7 自定义的日志设备
日志级别:
debug 有 调试信息 的,日志信息最多
info 一般信息日志,最常用
notice 最具有重要性的普通条件的信息
warning 警告级别
err 错误级别,组织某个功能或者模块不能正常工作的信息
crit 严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert 需要立刻修改的信息
emerg 内核崩溃等严重信息,emergency
none 什么都不记录
从上到下,级别由低到高,记录的信息越来越少
连接符号
. : 大于等于 xxx 级别的信息
.=: 等于 xxx 级别的信息
.!: 在 xxx 之外的等级的信息
/var/log/messages 核心系统日志文件
# ls /var/log/messages*
/var/log/messages /var/log/messages-20170219
Linux系统最核心的日志文件,假若某个服务没有定义日志,那么该服务产生的日志就会记录到这个文件中。为避免一直写入数据占用磁盘空间,可对日志进行归档操作,该日志每周归档一次。记录过程会自动切割文档。可以通过cat,tail查看
日志如何切割,如何命名等规则,是根据/etc/logrotate.conf 来控制归档, 【rotate [rə(ʊ)'teɪt] 循环】。/var/log/messages 由 syslogd进程守护,如果暂停这个服务,系统不会产生/var/log/messages
#cat /etc/logrotate.conf
# rotate log files weekly
weekly 【每周归档一次】 # keep 4 weeks worth of backlogs rotate 4 【切割之后只保留4个】
# create new (empty) log files after rotating old ones create 【生成新的文件】 # use date as a suffix of the rotated file dateext 【以日期的形式命名】 # uncomment this if you want your log files compressed #compress 【如果想日志被压缩,改成compressed,默认不压缩】
/var/log/wtmp
查看用户登陆历史,不能直接cat查看,只能用 last 查看,#last即可,无需跟路径
/var/log/btmp
查看无效登陆历史,不能cat查看,用 lastb 查看,#lastb即可,无需跟路径
/var/log/maillog
记录邮件相关信息,比如发给谁邮件,是否发出去等信息。
/var/log/secure
一个安全认证相关的日志,比如系统用户登录时,正常登陆或者登陆失败都会记录,也会记录暴力登陆的情况
/var/log/dmesg 日志,记录系统启动时硬件相关信息
#dmesg 是一个命令,主要查看系统实时的硬件设备抛出的信息,如果磁盘异常或者网络异常或者内核异常都会记录下来。只不过这些信息是保存在内存中,一旦重启则消失。日志记录的是启动过程中记录的信息,并不完全一样。
主要记录硬件方面的故障,可以用这个命令查看。
10.35 screen工具
当执行一个脚本或者命令,需要几个小时甚至几天,如果中途断网或出现其他意外情况,执行的任务中断了怎么办。可以把命令或者脚本放到后台,但是也不保险。介绍两种方法避免这样的情况发生。
nohup 命令
作用是不挂断的运行命令,搜集进程在运行的时候产生的日志
[root@wangbin ~]# nohup sleep 100 & 【丢入后台的同时,加上nohup】
[1] 1976
[root@wangbin ~]# nohup: ignoring input and appending output to `nohup.out'
nohup.out便是记录这个日志的文件,可以cat查看日志,但是这里sleep因为本身不会输出日志,所以这里并不能看到有记录。
加 & 就可以放到后台,但是在中断退出时很有可能这个脚本也退出,那么在前面加 nohup 就没有问题了,nohup就是不挂断的运行命令,把运行命令产生的日志都记录到nohup 文件里。
screen 命令
screen 是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的ssh连接窗口一样
#yum install -y screen
#screen 【进入到一个新的连接窗口】
#screen -ls 【查看已经打开的screen会话】
ctrl + a 再按 d 退出screen会话,只是退出,并没有结束。
ctrl + d 或者 exit 退出
#screen -r 1767 【退出后可通过编号进入,只有一个screeen的时候编号可以省略】
#screen -S aming 【自定义screen 的名字】
#screen -r aming 【进入aming screen】
所以,当有某个长时间运行的命令或者脚本时,就打开一个screen会话,然后运行该任务。按ctrl + a 再按 d 退出会话,不影响端口窗口上的任何操作。
#screeen 【进入一个终端】
#vmstat 1 【vmstat退出】
#screen 【另一个屏幕】
#top 【top退出】
#ps aux |grep -E 'vmstat|top' 【查看后台运行的vmstat和top命令】
#ps aux |grep 'vmstat|top' 【此时并不能grep screeen,因为screen并不是一个进程】