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-tools
Nach der Installation erhalten Sie inotifywait
diese inotifywatch
beiden Befehle:
inotifywait
Der Befehl kann verwendet werden, um Informationen über den Dateizugriff zu sammeln. Linux-Distributionen enthalten diesen Befehl im Allgemeinen nicht und müssen installiert werdeninotify-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 .inotifywatch
Der 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 ist2.6.13
, müssen Sie den Kernel neu kompilieren, um Inotify-Unterstützung hinzuzufügen. -
Methode 2: Verwenden Sie
ll /proc/sys/fs/inotify
den 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 while
die inotifywait-Überwachung aus und wartet dann hier; und führt es erneut aus, nachdem das Ereignis ausgelöst wurde, git pull
weil 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 build
alle 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