首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >inotify+rsync实现实时同步

inotify+rsync实现实时同步

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

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

  1. 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化
  2. 发现目录中数据产生变化,就利用rsync服务推送到备份服务器

1.2 实现实时同步的方法

   inotify+rsync 方式实现数据同步

   sersync 方式实现实时数据同步 详情参照:http://www.cnblogs.com/clsn/p/7707828.html

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.3 【官方说明】三个重要文件1.4.2 【服务优化】可以将三个文件的数值调大,监听更大的范围

代码语言: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源

  http://mirrors.aliyun.com

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

inotify软件的参考资料链接:

  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

5、移动事件 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:clsn123" >>/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 "clsn123" >>/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的作用:

一共安装了2个工具(命令),即inotifywait和inotifywatch

inotifywait : 在被监控的文件或目录上等待特定文件系统事件(open close delete等)发生,

      执行后处于阻塞状态,适合在shell脚本中使用

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

  说明:yum安装后可以直接使用,如果编译安装需要进入到相应软件目录的bin目录下使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#命令 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)

  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 脚本后台运行方法

01. sh inotify.sh &

 02. nohup sh inotify.sh &

 03. screen实现脚本程序后台运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sh /server/scripts/inotify.sh &
nohup
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 +a d  :退出当前的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

提示信息:

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

 本文出自“惨绿少年”,欢迎转载,转载请注明出处!http://blog.znix.top

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
【操作系统不挂科】操作系统期末考试题库(单选题&简答题&计算与分析题&应用题)
A. 用户编写的一个子程序 B. 高级语言中的库程序 C. 操作系统中的一条命令 D. 操作系统向用户程序ᨀ供的接口
YY的秘密代码小屋
2025/01/05
6540
【操作系统不挂科】操作系统期末考试题库(单选题&简答题&计算与分析题&应用题)
操作系统精髓与设计原理--IO管理和磁盘调度
IO体系结构是计算机系统和外部的接口,同时也是操作系统中设计最难的部分,因为存在许多不同的设备和它们的应用,难有统一一致的解决方案。 IO体系结构的设计目标是提供一种系统化方法来控制与外部的交互,并且给操作系统提供有效管理IO所需的信息。
学徒漠筱歌
2022/07/17
2.9K0
操作系统精髓与设计原理--IO管理和磁盘调度
【操作系统不挂科】操作系统期末考试卷<3>(单选题&简答题&计算与分析题&应用题)
A. 在实时系统中并发运行多个程序 B. 在分布系统中同一时刻运行多个程序 C. 在一台处理机上同一时刻运行多个程序 D. 在一台处理机上并发运行多个程序
YY的秘密代码小屋
2025/01/07
2340
【操作系统不挂科】操作系统期末考试卷<3>(单选题&简答题&计算与分析题&应用题)
【操作系统不挂科】操作系统期末考试题库<2>(单选题&简答题&计算与分析题&程序分析题&应用题)
A.管理计算机裸机 B. 设计、提供用户程序与计算机硬件系统的界面 C. 管理计算机系统资源 D. 高级程序设计语言的编译器
YY的秘密代码小屋
2025/01/06
2920
【操作系统不挂科】操作系统期末考试题库<2>(单选题&简答题&计算与分析题&程序分析题&应用题)
操作系统 第六章:输入输出系统
I/O系统的主要任务: 完成用户提出的I/O请求; 提高I/O速率; 提高设备的利用率;为更高层的进程方便地使用这些设备提供手段;
Here_SDUT
2022/08/09
1.4K0
操作系统 第六章:输入输出系统
操作系统生磁盘的使用---18
看了上面的基本过程后,相信大家可以理解了,如果我们要操作磁盘读写的话,就是告诉磁盘控制器关于柱面、磁头、扇区、缓 存位置,然后是读还是写,剩下的由磁盘控制器完成。
大忽悠爱学习
2022/08/23
1K0
操作系统生磁盘的使用---18
[每天五分钟,备战架构师-4]操作系统之设备管理
设备管理是对计算机输入、输出系统的管理,这是操作系统最具有多样性和复杂性的部分,其主要任务是选择合适的设备进行数据传输,控制数据交换的过程,为用户提供透明的接口让用户不必关心设备的特性,为完成这些任务,需要提供的功能主要包括:缓冲区管理、设备分配、设备处理、虚拟设备管理、实现设备独立性等。
大江小浪
2018/07/24
9020
[每天五分钟,备战架构师-4]操作系统之设备管理
操作系统复习——第十二章 大容量存储器结构
一个典型的坏扇区事务处理可能如下: ·操作系统试图访问逻辑块87。 ·控制器计算ECC的值,发现该块是坏的,它将此结果通知操作系统。 ·下次操作系统重启时,可以运行一个特殊程序以告诉SCSI控制器用备用块替代坏块。 ·之后,每当系统试图访问逻辑块87时,这一请求就转换成控制器所替代的扇区的地址。 12.6 交换空间管理 12.7 RAID结构(磁盘冗余阵列) 一个系统拥有了大量磁盘,它就有机会改善数据读写速度(因为磁盘操作可并行进行)。而且,这种设置也使系统有机会改善数据存储的可靠性,因为可在多个磁
种花家的奋斗兔
2020/11/12
1.1K0
操作系统核心原理-6.外存管理(上)磁盘基础
  计算机是处理数据的机器,而数据就需要有地方存放。在计算机中,可供数据存放的地方并不太多,除了内存之外,最主要的存储数据的媒介就是磁盘。对于大多数计算机领域的人来说,磁盘通常被看做是一种外部设备。可是,对于现代操作系统来说,磁盘是不可或缺的。虽然早期的操作系统可以基于磁带,但由于操作系统复杂性和性能的不断提升,用磁带作为操作系统的载体已经不合时宜,取而代之的是磁盘。由于操作系统需要存放在磁盘上,且操作系统内的文件系统也是基于磁盘,所以,从某种程度来说,磁盘是操作系统不可分割的一部分,理解磁盘将对理解操作系统的原理具有重要的意义。
Edison Zhou
2018/08/20
8490
操作系统核心原理-6.外存管理(上)磁盘基础
【操作系统不挂科】<线程概念>选择题&简答题(带答案与解析)
A.引入线程后,处理机只在线程间切换 B. 引入线程后,处理机仍在进程间切换 C. 线程的切换,不会引起进程的切换 D. 线程的切换,可能引起进程的切换
YY的秘密代码小屋
2024/11/17
1850
操作系统实验六
简直可怕,怎么可能写出来磁盘调度算法啊喂!算法实现倒还好说,就是一个排序算法。但是!访问的柱面就是随机生成的所以还要写iterator?!这里简单描述一下各种磁盘调度算法。
Ewdager
2020/07/14
1.1K0
【操作系统不挂科】<内存管理综述(14)>选择题&简答题(带答案与解析)
A.分页式存储管理 B.分段式存储管理 C.固定分区式存储管理 D.段页式存储管理
YY的秘密代码小屋
2024/11/26
2240
[操作系统]磁盘调度算法
一次磁盘读写操作所需要的时间 寻找时间(寻道时间):磁头臂前后移动寻找磁道所需的时间 (系统软件可算法优化) 延迟时间:磁头旋转定位到目标扇区所需要的时间 (固定) 传输时间:读写数据到扇区所需的时间 (固定)
唯一Chat
2021/01/05
1.3K0
[操作系统]磁盘调度算法
软考系统架构设计师(三):操作系统
操作系统是直接控制和管理计算机硬件、软件资源,合理地对各类作业进行调度,以方便用户使用的程序集合。
陈大剩博客
2023/03/22
8280
软考系统架构设计师(三):操作系统
操作系统学习笔记-I/O管理和磁盘调度
控制的复杂性:例如,打印机仅需要一个相对简单的控制接口,而磁盘的控制接口则要复杂得多。
花猪
2022/02/16
1K0
操作系统学习笔记-I/O管理和磁盘调度
【系统架构设计师】计算机组成与体系结构 ⑩ ( 磁盘管理 | 磁盘移臂调度算法 | 先来先服务算法 | 最短寻道时间优先 | 扫描算法 | 循环扫描算法 )
旋转延时 是 硬盘的 盘面 持续保持匀速旋转 实现的 , 这是 硬盘 本身的硬件特性 , 该延时没有规律 ;
韩曙亮
2024/07/09
1K0
【系统架构设计师】计算机组成与体系结构 ⑩ ( 磁盘管理 | 磁盘移臂调度算法 | 先来先服务算法 | 最短寻道时间优先 | 扫描算法 | 循环扫描算法 )
【操作系统不挂科】<内存管理-虚拟内存(17)>选择题&简答题&简答题(带答案与解析)
A.要求作业运行前,必须全部装入内存,且在运行中必须常驻内存 B.要求作业运行前,不必全部装入内存,且在运行中不必全部常驻内存 C.要求作业运行前,不必全部装入内存,但在运行中必须全部常驻内存 D.要求作业运行前,必须全部装入内存,且在运行中不必常驻内存
YY的秘密代码小屋
2024/12/01
3020
【操作系统不挂科】<内存管理-虚拟内存(17)>选择题&简答题&简答题(带答案与解析)
【愚公系列】软考中级-软件设计师 030-操作系统(设备管理)
设备管理是操作系统的一项重要功能,它负责管理计算机系统中的各种硬件设备,包括输入设备、输出设备和存储设备等。设备管理的主要任务包括设备的分配、控制和调度。
愚公搬代码
2024/02/11
2660
肝了很久!一文了解操作系统 I/O
我们之前的文章提到了操作系统的三个抽象,它们分别是进程、地址空间和文件,除此之外,操作系统还要控制所有的 I/O 设备。操作系统必须向设备发送命令,捕捉中断并处理错误。它还应该在设备和操作系统的其余部分之间提供一个简单易用的接口。操作系统如何管理 I/O 是我们接下来的重点。
cxuan
2020/06/28
1.3K0
肝了很久!一文了解操作系统 I/O
【考前完整复习】操作系统计算题与大题
先来先服务算法指的是按照作业/进程到达的先后顺序进行服务的,主要从“公平”的角度考虑。用于作业调度时,考虑的是哪个作业先到达后备队列;用于进程调度时,考虑的是哪个进程先到达就绪队列,是非抢占式算法,不会导致饥饿(某进程/作业长时间得不到服务)
命运之光
2024/03/20
3680
【考前完整复习】操作系统计算题与大题
推荐阅读
【操作系统不挂科】操作系统期末考试题库(单选题&简答题&计算与分析题&应用题)
6540
操作系统精髓与设计原理--IO管理和磁盘调度
2.9K0
【操作系统不挂科】操作系统期末考试卷<3>(单选题&简答题&计算与分析题&应用题)
2340
【操作系统不挂科】操作系统期末考试题库<2>(单选题&简答题&计算与分析题&程序分析题&应用题)
2920
操作系统 第六章:输入输出系统
1.4K0
操作系统生磁盘的使用---18
1K0
[每天五分钟,备战架构师-4]操作系统之设备管理
9020
操作系统复习——第十二章 大容量存储器结构
1.1K0
操作系统核心原理-6.外存管理(上)磁盘基础
8490
【操作系统不挂科】<线程概念>选择题&简答题(带答案与解析)
1850
操作系统实验六
1.1K0
【操作系统不挂科】<内存管理综述(14)>选择题&简答题(带答案与解析)
2240
[操作系统]磁盘调度算法
1.3K0
软考系统架构设计师(三):操作系统
8280
操作系统学习笔记-I/O管理和磁盘调度
1K0
【系统架构设计师】计算机组成与体系结构 ⑩ ( 磁盘管理 | 磁盘移臂调度算法 | 先来先服务算法 | 最短寻道时间优先 | 扫描算法 | 循环扫描算法 )
1K0
【操作系统不挂科】<内存管理-虚拟内存(17)>选择题&简答题&简答题(带答案与解析)
3020
【愚公系列】软考中级-软件设计师 030-操作系统(设备管理)
2660
肝了很久!一文了解操作系统 I/O
1.3K0
【考前完整复习】操作系统计算题与大题
3680
相关推荐
【操作系统不挂科】操作系统期末考试题库(单选题&简答题&计算与分析题&应用题)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验