Installation und grundlegende Verwendung von inotifywait

Denn jedes Mal, wenn das Vue-Projekt eines Front-End-Klassenkameraden an Git gesendet wird, muss er es mir privat mitteilen, und dann aktualisiere ich den Code und erstelle ihn neu, was problematisch ist. Da die IP der lokalen Umgebung jedoch keine öffentliche IP ist , der Webhook ist nicht erreichbar, daher kann ich nur crontab verwenden. Rufen Sie den Code regelmäßig ab und arbeiten Sie dann mit inotifywait zusammen, um Dateiänderungen zu überwachen und den Code automatisch zu erstellen. Deshalb habe ich diesen Artikel geschrieben, um die Installation und grundlegende Verwendung von inotifywait für spätere Zwecke aufzuzeichnen Referenz.

Nachdruck von: https://blog.csdn.net/qq_37788558/article/details/104985262

1. Einführung in inotifywait

Inotify Ein leistungsstarker, feinkörniger, asynchroner Dateisystemüberwachungsmechanismus, der eine Vielzahl von Dateiüberwachungsanforderungen erfüllt und Dateisystemzugriffsattribute, Lese- und Schreibattribute, Berechtigungsattribute, Lösch-, Erstellungs-, Verschiebungs- und andere Vorgänge überwachen kann, d. h. alle Änderungen an Dateien können überwacht werden.

inotify-tools Es handelt sich um eine C-Bibliothek und eine Reihe von Befehlszeilenfunktionen, die eine einfache Schnittstelle für inotify unter Linux bereitstellen. inotify-toolsNach der Installation erhalten Sie inotifywaitdiese inotifywatchbeiden Befehle:

  • inotifywaitDer Befehl kann verwendet werden, um Informationen über den Dateizugriff zu sammeln. Linux-Distributionen enthalten diesen Befehl im Allgemeinen nicht und müssen installiert werden inotify-tools. Dieser Befehl erfordert auch die Kompilierung der Inotify-Unterstützung in den Linux-Kernel. Glücklicherweise ist in den meisten Linux-Distributionen Inotify aktiviert Kernel .
  • inotifywatchDer Befehl wird verwendet, um Statistiken über das überwachte Dateisystem zu sammeln, einschließlich der Häufigkeit, mit der jedes Inotify-Ereignis aufgetreten ist.

Zu den ähnlichen Tools gehören außerdem fswatch usw.
//@Todo Vergleichen Sie die Auswahl ähnlicher Tools

2. Installation

2.1 Bevor Sie beginnen, müssen Sie prüfen, ob der Systemkernel inotify unterstützt

  • Methode 1: Verwenden Sie  uname -r den Befehl, um den Linux-Kernel zu überprüfen. Wenn er niedriger als der Wert ist 2.6.13, müssen Sie den Kernel neu kompilieren, um Inotify-Unterstützung hinzuzufügen.

  • Methode 2: Verwenden Sie ll /proc/sys/fs/inotifyden Befehl, um zu prüfen, ob die folgenden drei Meldungen ausgegeben werden. Wenn nicht, bedeutet dies, dass sie nicht unterstützt wird.

$ ll /proc/sys/fs/inotify

total 0
-rw-r--r-- 1 root root 0 Jan 4 15:41 max_queued_events
-rw-r--r-- 1 root root 0 Jan 4 15:41 max_user_instances
-rw-r--r-- 1 root root 0 Jan 4 15:41 max_user_watches

2.2 Installationsschritte

Sie können es direkt mit dem Paketverwaltungstool installieren, das mit dem Linux-System geliefert wird, oder Sie können es manuell aus dem Quellcode kompilieren und installieren.

2.2.1 Installation mit Paketverwaltungstool

Nehmen Sie als Beispiel das Yum, das mit dem Centos-System geliefert wird.

Informationen zu Installationsmethoden anderer Linux-Distributionen finden Sie unter: https://github.com/rvoicilas/inotify-tools/wiki#wiki-getting

$ yum search inotify-tools
$ yum info inotify-tools
$ sudo yum install inotify-tools

2.2.2 Kompilierung und Installation des Quellcodes

$ wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
$ tar zxf inotify-tools-3.14.tar.gz
$ cd inotify-tools-3.14/
$ ./configure && make && make install

Wenn der folgende Fehler auftritt

inotifywait: error while loading shared libraries: libinotifytools.so.0: cannot open shared object file: No such file or directory

Lösung:

lecker install -y gcc*

32位系统:ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib/libinotifytools.so.0
64位系统:ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0

3. Grundlegende Verwendung von inotifywait

Nachdem die Installation abgeschlossen ist, können Sie es einfach ausprobieren und den folgenden Befehl ausführen, um die Datei log.txt zu überwachen.

$ inotifywait -m log.txt
# 这里 -m 参数指明持续监听,不加的话会在一个事件后退出

Setting up watches.
Watches established.
# 此时持续监听,有事件出发会输出到屏幕

Führen Sie dann den folgenden Befehl in einem anderen Fenster aus, um Inhalte in die Datei log.txt zu schreiben

$ echo >> log.txt

Es ist zu beobachten, dass der vorherige Bildschirm ausgegeben wird, da die Ereignisse beim Öffnen, Ändern und Schließen der Datei überwacht werden.

log.txt OPEN
log.txt MODIFY
log.txt CLOSE_WRITE,CLOSE

3.1. Parameterbeschreibung

3.1.1 Häufig verwendete Parameter

--timefmt 时间格式
    %y年 %m月 %d日 %H小时 %M分钟
--format 输出格式
    %T时间 %w路径 %f文件名 %e状态
 
-m 始终保持监听状态,默认触发事件即退出
-r 递归查询目录
-q 减少不必要的输出(只打印事件信息)
 
-e 定义监控的事件,可用参数:
    open   打开文件
    access 访问文件
    modify 修改文件
    delete 删除文件
    create 新建文件
    attrib 属性变更
 
--exclude <pattern> 指定要排除监控的文件/目录
  •  

3.1.2 Alle Parameter

Es wird empfohlen, alle Parameter im Dokument über  den Befehl man inotifywait anzuzeigen

-h,–help
输出帮助信息
@
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
–fromfile
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-m, –monitor
接收到一个事情而不退出,无限期地执行。默认的行为是接收到一个事情后立即退出。
-d, –daemon
跟–monitor一样,除了是在后台运行,需要指定–outfile把事情输出到一个文件。也意味着使用了–syslog。
-o, –outfile
输出事情到一个文件而不是标准输出。
-s, –syslog
输出错误信息到系统日志
-r, –recursive
监视一个目录下的所有子目录。
-q, –quiet
指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。
–exclude
正则匹配需要排除的文件,大小写敏感。
–excludei
正则匹配需要排除的文件,忽略大小写。
-t , –timeout
设置超时时间,如果为0,则无限期地执行下去。
-e , –event
指定监视的事件。
-c, –csv
输出csv格式。
–timefmt
指定时间格式,用于–format选项中的%T格式。
–format
指定输出格式。
%w 表示发生事件的目录
%f 表示发生事件的文件
%e 表示发生的事件
%Xe 事件以“X”分隔
%T 使用由–timefmt定义的时间格式

3.2 Überwachbare Ereignisse

access	访问,读取文件。

modify	修改,文件内容被修改。

attrib	属性,文件元数据被修改。

move	移动,对文件进行移动操作。

create	创建,生成新文件

open	打开,对文件进行打开操作。

close	关闭,对文件进行关闭操作。

delete	删除,文件被删除。

3.3 Anwendungsbeispiele

npm run build Überwachen Sie beispielsweise das Vue-Projekt und führen Sie den Befehl aus, um den Code zu erstellen, nachdem Dateiänderungen festgestellt wurden. 

Angenommen, das Dateiverzeichnis des Vue-Projekts lautet: /produktion/sites/vue-program

Gemäß der grundlegenden Verzeichnisstruktur des Vue-Projekts müssen wir das src-Verzeichnis unter diesem Verzeichnis überwachen und nur Dateiänderungsereignisse überwachen.

inotifywait /production/sites/vue-program/src #只监听src目录,因为package.json等文件在构建完成后也会被修改
-r #监听所有子目录文件
--timefmt '%d/%m/%y %H:%M' #时间输出格式,如果--format设置了%f,则必须指明
--format "%T %f" #输出格式
-e MODIFY #只监听文件修改事件
--exclude '^.*.swp$' #如果直接使用vim等编辑工具改动文件,会触发 .swp 临时文件的修改事件,所以我们需要排除所有正则形如 /^\.((?!\.swp$).)*$/ 的文件,但此表达式在linux中貌似不行,所以用的.*.swp

Um das Lesen zu erleichtern, ist jeder Parameter umschlossen und kommentiert und wie folgt in einer Zeile organisiert:

inotifywait /production/sites/vue-program/src -r --timefmt '%d/%m/%y %H:%M' --format "%T %f" -e MODIFY --exclude '^.*.swp$'

Der gewünschte Effekt besteht darin, die Ausführung beobachten zu können. Nachdem wir das Ereignis abgehört haben, fügen wir der Anweisung den Build-Code hinzu und erstellen die Shell-Datei. auto_build.sh

#!/bin/bash

projectDir=/production/sites/vue-program;

while inotifywait $projectDir/src -r --timefmt '%d/%m/%y %H:%M' --format "%T %f" -e MODIFY --exclude '^.*.swp$'
do
    cd $projectDir && git pull && npm run build
done

Da die Parameter hier  -m mehrere Dateien überwachen, kann ein Git-Commit mehrere Änderungsereignisse auslösen, daher wird es nicht verwendet. Stattdessen  -m löst es whiledie inotifywait-Überwachung aus und wartet dann hier; und führt es erneut aus, nachdem das Ereignis ausgelöst wurde,  git pullweil das erste Nach einer Datei Wenn das Änderungsereignis ausgelöst wird, ersetzt Git möglicherweise nicht alle Dateien vollständig. Um sicherzustellen, dass npm run buildalle Codes aktualisiert werden, wenn die Anweisung ausgeführt wird, wird sie hier erneut aktiv ausgeführt. git pull

Anschließend können Sie das Skript starten

nohup /bin/bash auto_build.sh >> /tmp/auto_build.log 2>&1 
  •  

Da die Crontab den Code regelmäßig abruft, wird er auf diese Weise automatisch erstellt, nachdem sich die Front-End-Codedatei geändert hat, wodurch die Mühe und die Auslassung manueller Vorgänge entfällt.

Weitere Informationen finden Sie in der offiziellen Dokumentation

Ich denke du magst

Origin blog.csdn.net/liuwkk/article/details/109145003
Empfohlen
Rangfolge