前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >inotify+rsync实现实时同步

inotify+rsync实现实时同步

作者头像
惨绿少年
发布于 2017-12-27 08:01:39
发布于 2017-12-27 08:01:39
3.7K00
代码可运行
举报
文章被收录于专栏:惨绿少年惨绿少年
运行总次数:0
代码可运行

第1章 数据实时同步介绍

1.1 什么是实时同步:如何实现实时同步

A. 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化

B. 发现目录中数据产生变化,就利用rsync服务推送到备份服务器

1.2 实现实时同步的方法

 inotify+rsync 方式实现数据同步

 sersync 方式实现实时数据同步

1.2.1 实时同步原理介绍

1.3 inotify+rsync 方式实现数据同步

1.3.1 Inotify简介

Inotify是一种强大的,细粒度的。异步的文件系统事件监控机制,linux内核从2.6.13起,加入了 Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而 inotify-tools 正是实施这样监控的软件。国人周洋在金山公司也开发了类似的实时同步软件sersync。

提示信息:

sersync软件实际上就是在 inotify软件基础上进行开发的,功能要更加强大些 ,多了定时重传机制,过滤机制了提供接口做 CDN,支持多线程橾作。

Inotify实际是一种事件驱动机制,它为应用程序监控文件系统事件提供了实时响应事件的机制,而无须通过诸如cron等的轮询机制来获取事件。cron等机制不仅无法做到实时性,而且消耗大量系统资源。相比之下,inotify基于事件驱动,可以做到对事件处理的实时响应,也没有轮询造成的系统资源消耗,是非常自然的事件通知接口,也与自然世界事件机制相符合。

inotify的实现有几款软件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
inotify-tools,sersync,lrsyncd

1.3.2 inotify+rsync使用方式

inotify 对同步数据目录信息的监控

rsync  完成对数据信息的实时同步

利用脚本进行结合

1.4 部署inotify软件的前提

需要2.6.13以后内核版本才能支持inotify软件。2.6.13内核之后版本,在没有安装inotify软件之前,应该有这三个文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@backup ~]# ll /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Oct 17 10:12 max_queued_events
-rw-r--r-- 1 root root 0 Oct 17 10:12 max_user_instances
-rw-r--r-- 1 root root 0 Oct 17 10:12 max_user_watches

1.4.1 三个重要文件的说明

文件

默认值

作用说明

max_user_watches

8192

设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)

max_user_instances

128

设置每个用户可以运行的inotifywait或inotifywatch命令的进程数

max_queued_events

16384

设置inotify实例事件(event)队列可容纳的事件数量

1.4.2 【服务优化】可以将三个文件的数值调大,监听更大的范围

1.4.3 【官方说明】三个重要文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 ~]# man proc
/proc/sys/fs/inotify (since Linux 2.6.13)
       This   directory   contains    files    max_queued_events,
       max_user_instances, and max_user_watches, that can be used
       to limit the amount of kernel memory consumed by the  inotify interface. 
for further details, see inotify(7).

通过man手册的第7级别中查到 inotify的默认文件的详细说明。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 ~]# man 7 inotify
/proc/sys/fs/inotify/max_queued_events
       The  value  in this file is used when an application calls
       inotify_init(2) to set an upper limit  on  the  number  of
       events  that  can  be  queued to the corresponding inotify
       instance.  Events in excess of this limit are dropped, but
       an IN_Q_OVERFLOW event is always generated.
 
/proc/sys/fs/inotify/max_user_instances
       This  specifies  an  upper  limit on the number of inotify
       instances that can be created per real user ID.
 
/proc/sys/fs/inotify/max_user_watches
       This specifies an upper limit on  the  number  of  watches
       that can be created per real user ID.

1.5 inotify软件介绍及参数说明

1.5.1 两种安装方式

1) yum install -y inotify-tools

2) 手工编译安装

注:

    YUM 安装需要有epel源

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://mirrors.aliyun.com

手工编译安装方式需要到github上进行下载软件包

    inotify软件的参考资料链接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/rvoicilas/inotify-tools/wiki

1.5.2 inotify主要安装的两个软件

inotifywait: (主要)

在被监控的文件或目录上等待特定文件系统事件(open close delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用

inotifywatch:

收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计。

说明:在实时实时同步的时候,主要是利用inotifywait对目录进行监控

1.5.3 inotifywait命令参数说明

参数

含义

-m, --monitor (重要参数)

Keep listening for events forever.  Without this option, inotifywait will exit after one event is received. 始终保持事件监听。

-d, --daemon

111

-r, --recursive (重要参数)

Watch all subdirectories of any directories passed as arguments. 递归监控目录数据信息变化

-o, --outfile <file>

Print events to <file> rather than stdout. 打印事件到文件中,相当于标准正确输出

-s, --syslog

Output errors to syslog(3) system log module rather than stderr. 发送错误到syslog相当于标准错误输出

-q, --quiet (重要参数)

If specified once, the program will be less verbose.  Specifically, it will not state  when  it  has  completed establishing all inotify watches. 输出信息少(只打印事件信息)

--exclude <pattern>

Exclude all events on files matching the extended regular expression <pattern>. 排除文件或目录

--excludei <pattern>

Like --exclude but case insensitive. 排除文件或目录时,不区分大小写

--timefmt <fmt> (重要参数)

Print using a specified printf-like format string; read the man page for more details. 指定时间输出格式

--format <fmt> (重要参数)

Print using a specified printf-like formatstring; read the man page for more details. 打印使用指定的输出类似格式字符串;即实际监控输出内容

-e (重要参数)

Listen for specific event(s).  If omitted, all events are listened for. 指定监听指定的事件,如果省略,表示所有事件都进行监听

以上的信息可以通过 inotifywait --help  获得

1.5.4 -e[参数]  可以指定的事件类型

事件名称

事件说明

access

file or directory contents were read 文件或目录内容被读取

modify

file or directory contents were writterv 文件或目录内容被写入

attrib

file or directory attributes changed 文件或目录属性改变

close_write (重要参数)

file or directory closed, after being opened in writeable mode. 文件或目录关闭,在写入模式打开之后关闭的。

close_nowrite

file or directory closed, after being opened in read-only mode. 文件或目录关闭,在只读模式打开之后关闭的

close

file or directory closed, regardless of read/write mode 文件或目录关闭,不管读或是写模式

open

file or directory opened 文件或目录被打开

moved_to 拉

file or directory moved to watched directory 文件或目录被移动到监控的目录中

moved_from 推

file or directory moved from watched directory 文件或目录被移动从监控的目录中

move (重要参数)

file or directory moved to or from watched directory 文件或目录不管移动到或是移出监控目录都触发事件

create (重要参数)

file or directory created within watched directory 文件或目录创建在监控目录中

delete (重要参数)

file or directory deleted within watched directory 文件或目录被删除在监控目录中

delete_self

file or directory was deleted 文件或目录被删除,目录本身被删除

unmount

file system containing file or directory unmounted

以上的信息可以通过 inotifywait --help  获得

1.5.4.1 【实例】inotifywait监控中的事件测试

1、创建事件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 data]# touch test2.txt
[root@nfs01 ~]# inotifywait -mrq  /data --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e create
17-10-17 11:19 /data/test2.txt 事件信息: CREATE

2、删除事件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 data]# \rm -f test1.txt
[root@nfs01 ~]# inotifywait -mrq  /data --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e delete
17-10-17 11:28 /data/test1.txt 事件信息: DELETE

3、修改事件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 data]# echo "132" > test.txt
[root@nfs01 ~]# inotifywait -mrq  /data --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e close_write
17-10-17 11:30 /data/test.txt 事件信息: CLOSE_WRITE,CLOSE

4、移动事件 moved_to

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 data]# mv /etc/hosts .
[root@nfs01 ~]# inotifywait -mrq  /data --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e moved_to
17-10-17 11:33 /data/hosts 事件信息: MOVED_TO

移动事件 moved_from

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 data]# mv ./hosts  /tmp/
[root@nfs01 ~]# inotifywait -mrq  /data --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e moved_from
17-10-17 11:34 /data/hosts 事件信息: MOVED_FROM

1.5.5 inotifywait 参数 --format <fmt>格式定义参数

命令参数

参数说明

%w(重要参数)

事件出现时,监控文件或目录的名称信息

%f(重要参数)

事件出现时,将显示监控目录下触发事件的文件或目录信息,否则为空

%e(重要参数)

显示发生的事件信息,不同的事件信息用逗号进行分隔

%Xe

显示发生的事件信息,不同的事件信息有x进行分隔,可以修改X为指定分隔符

%T(重要参数)

输出时间格式中定义的时间格式信息,通过 --timefmt option 语法格式指定时间信息 这个格式是通过strftime函数进行匹配时间格式信息的

以上的信息可以通过 inotifywait --help  获得

1.5.6 inotifywait 参数--timefmt <fmt>时间格式参数

命令参数

参数说明

%d(重要参数)

The day of the month as a decimal number(range 01 to 31) 每月的第几天,显示倍息为十进制数(范围是 01-31 )

%m(重要参数)

The month as a decimal number (range 01 to 12). 显示月份,显示信息为十进制(范围 01-12 )

%M

The minute as a decimal number (range 00 to 59). 显示分钟,显示信息为十进制(范围 00-59 )

%y(重要参数)

The year as a decimal number without a century (range 00 to 99). 年份信息,显示信息为十进制,并且没有世纪信息

%Y

The year as a decimal number including the century. 年份信息,显示信息为十进制,并且包含世纪信息

%H

The hour as a decimal number using a 24-hour clock (range 00 to 23). 小时信息,显示信息为十进制,使用 24小时制(范围 00-23 )

说明:以上信息可以通过 man strftime信息获取

1.5.6.1 修改输出的日期格式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 ~]# inotifywait -mrq  /data --timefmt "%d/%m/%y %H:%M" --format "%T %w%f"
17/10/17 11:12 /data/test1.txt

1.5.7 -e[参数] 重要监控事件参数汇总表:

重要事件

包含事件

备注说明

close

close_write   close_nowrite

文件或目录关闭,不管读或是写模式 即包含写关闭与读关闭

close_write

create

包含文件创建事件,但不包含目录创建事件

move

moved_to   moved_from

文件或目录不管移动到或是移动出监控目录都触发事件 即包含信息移入或移出监控目录事件

重要参数汇总:根据以上说明,在实际使用时,只要监控以下事件即可 create 创建、 delete 删除、 movedjto 移入、 close_write 修 改 inotifywait -mrq /data --format "%w%f"  -e create,delete,moved_to,close_write

1.6 对inotifywait命令的测试

对inotifywait命令测试的说明:

需要打开两个连接窗口

1窗口运行inotifywait

2窗口对文件夹进行操作,可在一窗口中查看出inotifywait的监控记录

1.6.1 、创建文件的逻辑↓

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 ~]# inotifywait /data
Setting up watches.
Watches established.
/data/ CREATE test1.txt
/data/ OPEN test1.txt
/data/ ATTRIB test1.txt
/data/ CLOSE_WRITE,CLOSE test1.txt
创建文件,inotifywait显示创建文件的过程↑
[root@nfs01 data]# touch test1.txt

1.6.2 创建目录逻辑↓

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 data]# mkdir testdir
[root@nfs01 ~]#
/data/ CREATE,ISDIR testdir

1.6.3 监控子目录下的文件↓

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 data]# touch  testdir/test01.txt
[root@nfs01 ~]# inotifywait -mrq  /data
/data/testdir/ OPEN test01.txt
/data/testdir/ ATTRIB test01.txt
/data/testdir/ CLOSE_WRITE,CLOSE test01.txt

1.6.4 sed命令修改逻辑

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 data]# sed 's#132#123#g' test.txt -i
 
[root@nfs01 ~]# inotifywait -mrq  /data --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e moved_from
 /data/test.txt 事件信息: OPEN
 /data/sedDh5R8v 事件信息: CREATE
 /data/sedDh5R8v 事件信息: OPEN
 /data/test.txt 事件信息: ACCESS
 /data/sedDh5R8v 事件信息: MODIFY
 /data/sedDh5R8v 事件信息: ATTRIB
 /data/sedDh5R8v 事件信息: ATTRIB
 /data/test.txt 事件信息: CLOSE_NOWRITE,CLOSE
 /data/sedDh5R8v 事件信息: CLOSE_WRITE,CLOSE
 /data/sedDh5R8v 事件信息: MOVED_FROM
 /data/test.txt 事件信息: MOVED_TO

sed命令替换逻辑

01. 创建临时文件

02. 将原文件内容放置到临时文件中,修改替换临时文件中的内容,原有文件不做改动

03. 重命名临时文件,覆盖原文件

1.6.5 inotifywait监控中 -e 的参数使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
inotifywait -mrq /data --timefmt "%d/%m/%y %H:%M" --format "%T %w%f 事件信息: %e" -e create

说明:表示只监听create事件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
inotifywait -mrq /data --timefmt "%d/%m/%y %H:%M" --format "%T %w%f 事件信息: %e"

说明:不指定-e参数,表示监听所有事件

02. 删除事件delete

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    # inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f 事件信息: %@e" -e delete
    2017-10-17 11:28 /data/02.txt 事件信息: DELETE
    2017-10-17 11:28 /data/03.txt 事件信息: DELETE
    2017-10-17 11:28 /data/04.txt 事件信息: DELETE

    03. 修改事件close_write

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  # inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f 事件信息: %@e" -e delete,close_write
    2017-10-17 11:30 /data/oldgirl.txt 事件信息: CLOSE_WRITE@CLOSE
    2017-10-17 11:30 /data/.oldgirl.txt.swx 事件信息: CLOSE_WRITE@CLOSE
    2017-10-17 11:30 /data/.oldgirl.txt.swx 事件信息: DELETE
    2017-10-17 11:30 /data/.oldgirl.txt.swp 事件信息: CLOSE_WRITE@CLOSE
    2017-10-17 11:30 /data/.oldgirl.txt.swp 事件信息: DELETE
    2017-10-17 11:30 /data/.oldgirl.txt.swp 事件信息: CLOSE_WRITE@CLOSE
    2017-10-17 11:30 /data/.oldgirl.txt.swp 事件信息: DELETE

    04. 移动事件moved_to

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f 事件信息: %@e" -e delete,close_write,moved_to
    2017-10-17 11:34 /data/hosts 事件信息: MOVED_TO

1.7 实时同步命令参数示意图

第2章 inotify+rsync实时同步服务部署

2.1 第一个里程碑:部署rsync服务

2.1.1 rsync服务端部署

1)软件是否存在

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@backup ~]# rpm -qa |grep rsync
rsync-3.0.6-12.el6.x86_64

需求:查询到某个命令非常有用。但是不知道属于哪个软件包

yum provides rysnc

    provides   Find what package provides the given value

2)进行软件服务配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
auth users = rsync_backup
secrets file = /etc/rsync.password

[backup]
comment = "backup dir by oldboy"
path = /backup

[nfsbackup]
comment = "nfsbackup dir by hzs"
path = /nfsbackup

3)创建rsync管理用户

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@backup ~]# useradd -s /sbin/nologin -M rsync

4)创建数据备份储存目录,目录修改属主

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@backup ~]# mkdir /nfsbackup/
[root@backup ~]# chown -R rsync.rsync /nfsbackup/

5)创建认证用户密码文件并进行授权600

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo "rsync_backup:oldboy123" >>/etc/rsync.password
chmod 600 /etc/rsync.password

6)启动rsync服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rsync --daemon

至此服务端配置完成

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@backup ~]# ps -ef |grep rsync
root       2076      1  0 17:05 ?        00:00:00 rsync --daemon
root       2163   1817  0 17:38 pts/1    00:00:00 grep --color=auto rsync

2.1.2 rsync客户端配置

1)软件是否存在

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@backup ~]# rpm -qa |grep rsync
rsync-3.0.6-12.el6.x86_64

2)创建安全认证文件,并进行修改权限600

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo "oldboy123" >>/etc/rsync.password
chmod 600 /etc/rsync.password

3) 测试数据传输

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 sersync]# rsync -avz /data  rsync_backup@172.16.1.41::nfsbackup  --password-file=/etc/rsync.password
sending incremental file list
data/
data/.hzs
data/.tar.gz
data/.txt

2.2 第二个里程碑:部署inotify服务

首先先确认是否有epel源用来安装inotify-tools软件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 ~]# yum repolist
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
repo id  repo name                                       status
base     CentOS-6 - Base - mirrors.aliyun.com             6,706
epel     Extra Packages for Enterprise Linux 6 - x86_64  12,401
extras   CentOS-6 - Extras - mirrors.aliyun.com              46
updates  CentOS-6 - Updates - mirrors.aliyun.com            722
repolist: 19,875

2.2.1 安装inotify软件

两种安装方式

1) yum install -y inotify-tools

2) 手工编译安装

注:

手工编译安装方式需要到github上进行下载软件包

    inotify软件的参考资料链接:

https://github.com/rvoicilas/inotify-tools/wiki

2.2.2 查看inotify安装上的两个命令(inotifywait,inotifywatch)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 ~]# rpm -ql inotify-tools
/usr/bin/inotifywait      #主要
/usr/bin/inotifywatch
2.2.2.1 inotifywait和inotifywatch的作用:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
一共安装了2个工具(命令),即inotifywait和inotifywatch
inotifywait : 在被监控的文件或目录上等待特定文件系统事件(open close delete等)发生,
执行后处于阻塞状态,适合在shell脚本中使用
inotifywatch :收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计。
说明:yum安装后可以直接使用,如果编译安装需要进入到相应软件目录的bin目录下使用
 
#命令 man手册说明
# man inotifywait
inotifywait - wait for changes to files using inotify

使用inotify进行监控,等待产生变化的文件信息
# man inotifywatch
inotifywatch - gather filesystem access statistics using inotify
使用inotify进行监控,收集文件系统访问统计佶息

2.3 第三个里程碑:编写脚本,实现rsync+inotify软件功能结合

2.3.1 rsync服务命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rsync -avz --delete /data/ rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password

2.3.2 inotify服务命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
inotifywait -mrq /data -format "%w%f"  -e create,delete,move_to,close_write

2.3.3 编写脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 sersync]# vim /server/scripts/inotify.sh
#!/bin/bash
inotifywait -mrq /data --format "%w%f" -e create,delete,moved_to,close_write|\
while read line
do
        rsync -az --delete /data/ rsync_backup@172.16.1.41::nfsbackup --password-
file=/etc/rsync.password
done

脚本说明:

for循环会定义一个条件,当条件不满足时停止循环

while循环:只要条件满足就一直循环下去

2.3.4 对脚本进行优化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
Path=/data
backup_Server=172.16.1.41
/usr/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete /data  | while read line  
do
    if [ -f $line ];then
        rsync -az $line --delete rsync_backup@$backup_Server::nfsbackup --password-file=/etc/rsync.password
    else
        cd $Path &&\
        rsync -az ./ --delete rsync_backup@$backup_Server::nfsbackup --password-file=/etc/rsync.password
    fi
done

2.4 第四个里程碑:测试编写的脚本

2.4.1 让脚本在后台运行

在/data 目录先创建6个文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 data]# sh  /server/scripts/inotify.sh &
[root@nfs01 data]# touch {1..6}.txt

在backup服务器上,已经时候同步过去了6个文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@backup ~]# ll /nfsbackup/
total 8
-rw-r--r-- 1 rsync rsync 0 Oct 17 12:06 1.txt
-rw-r--r-- 1 rsync rsync 0 Oct 17 12:06 2.txt
-rw-r--r-- 1 rsync rsync 0 Oct 17 12:06 3.txt
-rw-r--r-- 1 rsync rsync 0 Oct 17 12:06 4.txt
-rw-r--r-- 1 rsync rsync 0 Oct 17 12:06 5.txt
-rw-r--r-- 1 rsync rsync 0 Oct 17 12:06 6.txt

2.5 利用while循环语句编写的脚本停止方法(kill)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
01. ctrl+z暂停程序运行,kill -9杀死
02. 不要暂停程序,直接利用杀手三剑客进行杀进程

说明:kill三个杀手不是万能的,在进程暂停时,无法杀死;kill -9 (危险)

2.5.1 查看后台都要哪些程序在运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 data]# jobs
[1]+  Running                 sh /server/scripts/inotify.sh &

2.5.2 fg将后台的程序调到前台来

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@nfs01 data]# fg 1
sh /server/scripts/inotify.sh

2.6 进程的前台和后台运行方法:

    fg    -- 前台

    bg    -- 后台

2.6.1 脚本后台运行方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    01. sh inotify.sh &
    02. nohup sh inotify.sh &
    03. screen实现脚本程序后台运行

sh /server/scripts/inotify.sh &

nohup

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nohup sh inotify.sh &

2.7 screen实现脚本程序后台运行

2.7.1 经过yum查找发现screen命令属于screen包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@test ~]# yum provides screen
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
base                                                      | 3.7 kB     00:00    
epel                                                      | 4.3 kB     00:00    
extras                                                    | 3.4 kB     00:00    
updates                                                   | 3.4 kB     00:00    
screen-4.0.3-19.el6.x86_64 : A screen manager that supports multiple logins on
                           : one terminal
Repo        : base
Matched from:

2.7.2 安装screen软件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@test ~]# yum install -y  screen

2.7.3 screen命令的参数

在shell中输入 screen即可进入screen 视图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@test ~]# screen

Screen实现后台运行程序的简单步骤:

  screen -ls :可看screen会话

  screen -r ID :指定进入哪个screen会话

Screen命令中用到的快捷键

  Ctrl+a c :创建窗口

  Ctrl+a w :窗口列表

  Ctrl+a n :下一个窗口

  Ctrl+a p :上一个窗口

  Ctrl+a 0-9 :在第0个窗口和第9个窗口之间切换

  Ctrl+a K(大写) :关闭当前窗口,并且切换到下一个窗口 ,

(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)

  exit :关闭当前窗口,并且切换到下一个窗口

(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)

  Ctrl+a d :退出当前终端,返回加载screen前的shell命令状态

  Ctrl+a " : 窗口列表不同于w

2.8 sersync软件实现实时同步

http://www.cnblogs.com/znix/p/7707828.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-11-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
pandas完成时间序列分析基础
pandas时间序列分析的基本操作方法 ---- ---- 文章目录 导入需要的库 时间序列 生成时间序列 truncate过滤 时间戳 时间区间 指定索引 时间戳和时间周期可以转换 数据重采样 插值方法 导入需要的库 import pandas as pd import numpy as np import datetime as dt 时间序列 时间戳(timestamp) 固定周期(period) 时间间隔(interval) 生成时间序列 可以指定开始时间与周期 H:小时 D:天
北山啦
2022/11/27
6690
pandas完成时间序列分析基础
数据导入与预处理-拓展-pandas时间数据处理02
数据导入与预处理-拓展-pandas时间数据处理01 数据导入与预处理-拓展-pandas时间数据处理02 数据导入与预处理-拓展-pandas时间数据处理03 备注:如果有帮助,欢迎点赞收藏评论一键三联哈~~
用户2225445
2022/11/12
2K0
数据导入与预处理-拓展-pandas时间数据处理02
Pandas之:Pandas简洁教程
pandas是建立在Python编程语言之上的一种快速,强大,灵活且易于使用的开源数据分析和处理工具,它含有使数据清洗和分析⼯
程序那些事
2021/06/05
1.4K0
时间序列建模的时间戳与时序特征衍生思路
时间序列模型在我们日常工作中应用的场景还是会很多的,比如我们去预测未来的销售单量、预测股票价格、预测期货走势、预测酒店入住等等,这也是我们必须要掌握时序建模的原因。而关于时间戳以及时序值的特征衍生,在建模过程中起到的作用是十分巨大的!之前写过一篇关于日期特征操作的文章——《关于日期特征,你想知道操作都在这儿~》,可以先回顾下,里面有关于日期特征的基础操作手法。
Sam Gor
2022/02/25
1.7K0
时间序列建模的时间戳与时序特征衍生思路
数据导入与预处理-拓展-pandas时间数据处理01
数据导入与预处理-拓展-pandas时间数据处理01 数据导入与预处理-拓展-pandas时间数据处理02 数据导入与预处理-拓展-pandas时间数据处理03
用户2225445
2022/11/12
6.7K0
数据导入与预处理-拓展-pandas时间数据处理01
Python 数据分析(PYDA)第三版(五)
对数据集进行分类并对每个组应用函数,无论是聚合还是转换,都可能是数据分析工作流程的关键组成部分。加载、合并和准备数据集后,您可能需要计算组统计信息或可能需要为报告或可视化目的计算数据透视表。pandas 提供了一个多功能的groupby接口,使您能够以自然的方式切片、切块和总结数据集。
ApacheCN_飞龙
2024/05/24
2790
Python 数据分析(PYDA)第三版(五)
Pandas-21.时间
Pandas-21.时间 now print(pd.datetime.now()) # 2019-04-03 23:06:58.992842 Timestamp print(pd.Timestamp("2020-1-1")) # 2020-01-01 00:00:00 print(pd.Timestamp(1588686880, unit='s')) # 2020-05-05 13:54:40 date_range print(pd.date_range("12:00", "14:30",freq="30m
悠扬前奏
2019/05/29
4880
Pandas处理时序数据(初学者必会)!
时序数据是指时间序列数据。时间序列数据是同一统一指标按时间顺序记录的数据列。在同一数据列中的各个数据必须是同口径的,要求具有可比性。时序数据可以是时期数,也可以时点数。
Datawhale
2020/07/15
3.3K0
Pandas处理时序数据(初学者必会)!
《利用Python进行数据分析·第2版》第11章 时间序列11.1 日期和时间数据类型及工具11.2 时间序列基础11.3 日期的范围、频率以及移动11.4 时区处理时区本地化和转换11.5 时期及其
时间序列(time series)数据是一种重要的结构化数据形式,应用于多个领域,包括金融学、经济学、生态学、神经科学、物理学等。在多个时间点观察或测量到的任何事物都可以形成一段时间序列。很多时间序列是固定频率的,也就是说,数据点是根据某种规律定期出现的(比如每15秒、每5分钟、每月出现一次)。时间序列也可以是不定期的,没有固定的时间单位或单位之间的偏移量。时间序列数据的意义取决于具体的应用场景,主要有以下几种: 时间戳(timestamp),特定的时刻。 固定时期(period),如2007年1月或201
SeanCheney
2018/04/24
6.7K0
《利用Python进行数据分析·第2版》第11章 时间序列11.1 日期和时间数据类型及工具11.2 时间序列基础11.3 日期的范围、频率以及移动11.4 时区处理时区本地化和转换11.5 时期及其
Pandas高级教程之:时间处理
时间应该是在数据处理中经常会用到的一种数据类型,除了Numpy中datetime64 和 timedelta64 这两种数据类型之外,pandas 还整合了其他python库比如scikits.timeseries中的功能。
程序那些事
2021/10/11
1.1K0
时间序列 | 时期(Period)及其算术运算
你可以将Period('2012','A-DEC')看做一个被划分为多个月度时期的时间段中的游标。下图对此进行了说明在将高频率转换为低频率时,超时期(superperiod)是由子时期(subperiod)所属的位置决定的。
数据STUDIO
2021/06/24
1.2K0
pandas多表操作,groupby,时间操作
使用场景:有两张表left和right,一般要求它们的表格结构一致,数据量也一致,使用right的数据去填补left的数据缺漏 如果在同一位置left与right数据不一致,保留left的数据
李智
2018/08/03
3.9K0
pandas多表操作,groupby,时间操作
Pandas处理时间序列数据-入门
在pandas中,时间戳(Timestamp,通常指的是自1970年1月1日(UTC)以来的秒数)是用于表示特定时间点的数据类型。它是pandas库中用于时间序列分析的一个重要组成部分,基于Python的datetime模块但提供了更丰富的功能。时间戳不仅包含日期(年、月、日),还包含时间(时、分、秒,以及可选的毫秒、微秒和纳秒)。
皮大大
2024/09/05
3000
pandas时间序列常用方法简介
pandas是Python数据分析最好用的第三方库,没有之一。——笛卡儿没说过这句话!
luanhz
2020/08/11
5.9K0
pandas时间序列常用方法简介
Pandas处理时间序列数据的20个关键知识点
时间序列数据有许多定义,它们以不同的方式表示相同的含义。一个简单的定义是时间序列数据包括附加到顺序时间点的数据点。
deephub
2020/09/23
2.8K0
Pandas处理时间序列数据的20个关键知识点
Pandas DateTime 超强总结
对于 Pandas 来说,可以处理众多的数据类型,其中最有趣和最重要的数据类型之一就是时间序列数据。时间序列数据无处不在,它在各个行业都有很多应用。患者健康指标、股票价格变化、天气记录、经济指标、服务器、网络、传感器和应用程序性能监控都是时间序列数据的应用方向
周萝卜
2022/05/22
5.6K0
Pandas DateTime 超强总结
python内置库和pandas中的时间常见处理(3)
时间数据在多数领域都是重要的结构化数据形式,例如金融、经济、生态学、神经科学和物理学。在多个时间点观测或测量数据形成了时间序列。多数时间序列是固定频率的,例如每1小时或每1天等。同样,时间序列也可以是不规则的,没有固定的时间单位或单位间偏移量。我们遇到的应用可能有以下几种:
python数据可视化之路
2023/02/23
1.5K0
Pandas 2.2 中文官方教程和指南(二十一·三)
这种切片方式也适用于具有DatetimeIndex的DataFrame。由于部分字符串选择是一种标签切片的形式,端点将被包括在内。这将包括在包含日期上匹配时间:
ApacheCN_飞龙
2024/05/24
2630
Data Science | 时期时间傻傻分不清楚
通过.asfreq(freq, method=None, how=None)方法可以将之前生成的频率转换成别的频率
咸鱼学Python
2019/10/09
5230
软件测试|数据处理神器pandas教程(八)
前面的文章中,我们讲解了pandas处理时间的功能,本篇文章我们来介绍pandas时间序列的处理。
霍格沃兹测试开发Muller老师
2023/04/10
1.3K0
推荐阅读
相关推荐
pandas完成时间序列分析基础
更多 >
LV.0
这个人很懒,什么都没有留下~
目录
  • 第1章 数据实时同步介绍
    • 1.1 什么是实时同步:如何实现实时同步
    • 1.2 实现实时同步的方法
      • 1.2.1 实时同步原理介绍
    • 1.3 inotify+rsync 方式实现数据同步
      • 1.3.1 Inotify简介
      • 1.3.2 inotify+rsync使用方式
    • 1.4 部署inotify软件的前提
      • 1.4.1 三个重要文件的说明
      • 1.4.2 【服务优化】可以将三个文件的数值调大,监听更大的范围
      • 1.4.3 【官方说明】三个重要文件
    • 1.5 inotify软件介绍及参数说明
      • 1.5.1 两种安装方式
      • 1.5.2 inotify主要安装的两个软件
      • 1.5.3 inotifywait命令参数说明
      • 1.5.4 -e[参数]  可以指定的事件类型
      • 1.5.5 inotifywait 参数 --format <fmt>格式定义参数
      • 1.5.6 inotifywait 参数--timefmt <fmt>时间格式参数
      • 1.5.7 -e[参数] 重要监控事件参数汇总表:
    • 1.6 对inotifywait命令的测试
      • 1.6.1 、创建文件的逻辑↓
      • 1.6.2 创建目录逻辑↓
      • 1.6.3 监控子目录下的文件↓
      • 1.6.4 sed命令修改逻辑
      • 1.6.5 inotifywait监控中 -e 的参数使用
    • 1.7 实时同步命令参数示意图
  • 第2章 inotify+rsync实时同步服务部署
    • 2.1 第一个里程碑:部署rsync服务
      • 2.1.1 rsync服务端部署
      • 2.1.2 rsync客户端配置
    • 2.2 第二个里程碑:部署inotify服务
      • 2.2.1 安装inotify软件
      • 2.2.2 查看inotify安装上的两个命令(inotifywait,inotifywatch)
    • 2.3 第三个里程碑:编写脚本,实现rsync+inotify软件功能结合
      • 2.3.1 rsync服务命令:
      • 2.3.2 inotify服务命令:
      • 2.3.3 编写脚本:
      • 2.3.4 对脚本进行优化
    • 2.4 第四个里程碑:测试编写的脚本
      • 2.4.1 让脚本在后台运行
    • 2.5 利用while循环语句编写的脚本停止方法(kill)
      • 2.5.1 查看后台都要哪些程序在运行
      • 2.5.2 fg将后台的程序调到前台来
    • 2.6 进程的前台和后台运行方法:
      • 2.6.1 脚本后台运行方法
    • 2.7 screen实现脚本程序后台运行
      • 2.7.1 经过yum查找发现screen命令属于screen包
      • 2.7.2 安装screen软件
      • 2.7.3 screen命令的参数
    • 2.8 sersync软件实现实时同步
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档