Installation et utilisation de base d'inotifywait

Parce que chaque fois que le projet Vue d'un camarade de classe front-end est poussé vers git, il doit me le dire en privé, puis je mets à jour le code et le reconstruis, ce qui est gênant. Cependant, comme l'adresse IP de l'environnement local n'est pas une adresse IP publique , le webhook n'est pas accessible, je ne peux donc utiliser que crontab. Extrayez le code régulièrement, puis coopérez avec inotifywait pour surveiller les modifications de fichiers et créer automatiquement le code. J'ai donc écrit cet article pour enregistrer l'installation et l'utilisation de base d'inotifywait pour les versions ultérieures. référence.

Tiré de : https://blog.csdn.net/qq_37788558/article/details/104985262

1. Introduction à inotifywait

Inotify Un mécanisme de surveillance du système de fichiers asynchrone, puissant et précis, qui répond à une variété de besoins de surveillance des fichiers et peut surveiller les attributs d'accès au système de fichiers, les attributs de lecture et d'écriture, les attributs d'autorisation, la suppression, la création, le déplacement et d'autres opérations, c'est-à-dire toutes les modifications apportées à les fichiers peuvent être surveillés.

inotify-tools Il s'agit d'une bibliothèque C et d'un ensemble de travaux en ligne de commande, fournissant une interface simple pour inotify sous Linux. inotify-toolsAprès l'installation, vous obtiendrez inotifywaitces inotifywatchdeux commandes :

  • inotifywaitLa commande peut être utilisée pour collecter des informations sur l'accès aux fichiers. Les distributions Linux n'incluent généralement pas cette commande et doivent être installées inotify-tools. Cette commande nécessite également que la prise en charge d'inotify soit compilée dans le noyau Linux. Heureusement, la plupart des distributions Linux ont activé inotify dans le noyau .
  • inotifywatchLa commande est utilisée pour collecter des statistiques sur le système de fichiers surveillé, y compris le nombre de fois où chaque événement inotify s'est produit.

De plus, les outils similaires incluent fswatch, etc.
//@Todo Comparez la sélection d'outils similaires

2.Installation

2.1 Avant de commencer, vous devez vérifier si le noyau du système prend en charge inotify

  • Méthode 1 : utilisez  uname -r la commande pour vérifier le noyau Linux. S'il est inférieur à la valeur 2.6.13, vous devez recompiler le noyau pour ajouter la prise en charge d'inotify.

  • Méthode 2 : utilisez ll /proc/sys/fs/inotifyla commande pour voir si les trois messages suivants sont affichés. Sinon, cela signifie qu'il n'est pas pris en charge.

$ 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 Étapes d'installation

Vous pouvez utiliser directement l'outil de gestion de packages fourni avec le système Linux pour l'installer, ou vous pouvez le compiler et l'installer manuellement à partir du code source.

2.2.1 Installation avec l'outil de gestion des packages

Prenons comme exemple le miam fourni avec le système centos.

Pour les méthodes d'installation d'autres distributions Linux, veuillez consulter : 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 Compilation et installation du code source

$ 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

Si vous rencontrez l'erreur suivante

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

Solution:

miam, installez -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. Utilisation de base d'inotifywait

Une fois l'installation terminée, vous pouvez simplement l'essayer et exécuter la commande suivante pour surveiller le fichier log.txt.

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

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

Exécutez ensuite la commande suivante via une autre fenêtre pour écrire le contenu dans le fichier log.txt

$ echo >> log.txt

On peut observer que l'écran précédent est affiché, car les événements d'ouverture, de modification et de fermeture du fichier sont surveillés.

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

3.1. Description des paramètres

3.1.1 Paramètres couramment utilisés

--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 Tous les paramètres

man inotifywait Il est recommandé de visualiser tous les paramètres du document via  la commande

-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 Événements contrôlables

access	访问,读取文件。

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

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

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

create	创建,生成新文件

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

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

delete	删除,文件被删除。

3.3 Exemples d'utilisation

npm run build Surveillez le projet vue et exécutez la commande pour créer le code après avoir découvert les modifications du fichier. 

Supposons que le répertoire du fichier du projet vue soit : /production/sites/vue-program

Selon la structure de répertoire de base du projet vue, nous devons surveiller le répertoire src sous ce répertoire et surveiller uniquement les événements de modification de fichier.

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

Afin de faciliter la lecture, chaque paramètre est renvoyé à la ligne et commenté, et est organisé sur une seule ligne comme suit :

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

L'effet que nous souhaitons est de pouvoir observer lors de l'exécution. Ensuite, après avoir écouté l'événement, nous ajoutons le code de construction à l'instruction et créons le fichier shell. 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

Étant donné que les paramètres ici  -m surveilleront plusieurs fichiers, un commit git peut déclencher plusieurs événements de modification, il n'est donc pas utilisé. Au lieu de cela, il  -m déclenche whilela surveillance inotifywait puis attend ici ; et l'exécute à nouveau après le déclenchement de l'événement  git pullcar le premier Après un fichier L'événement de modification est déclenché, git peut ne pas remplacer complètement tous les fichiers. Afin de garantir que npm run buildtous les codes sont mis à jour lorsque l'instruction est exécutée, elle est à nouveau activement exécutée ici. git pull

Ensuite, vous pouvez démarrer le script

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

De cette façon, avec la crontab extrayant régulièrement le code, il sera automatiquement construit après les modifications du fichier de code frontal, éliminant ainsi l'ennui et les omissions des opérations manuelles à chaque fois.

Plus d’informations peuvent être trouvées dans la documentation officielle

Je suppose que tu aimes

Origine blog.csdn.net/liuwkk/article/details/109145003
conseillé
Classement