inotifywait实现文件监控
<p><strong><a href="https://blog.csdn.net/u010837612/article/details/79657328">参考链接</a></strong></p>
<p><strong>应用场景</strong>
文件监控可以配合rsync实现文件自动同步,例如监听某个目录,当文件变化时,使用rsync命令将变化的文件同步。(可用于代码自动发布)</p>
<p><strong>安装</strong>
noitify下载地址:<a href="http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz">http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz</a></p>
<pre><code class="language-shell">cd inotify-tools-3.14
./configure
make
make install</code></pre>
<blockquote>
<p>安装成功后在<code>/usr/local/bin</code> 下会有<code>inotifywait</code> 和 <code>inotifywatch</code> 命令。</p>
</blockquote>
<p><strong>inotifywait命令使用</strong>
监听<code>/usr/local/src</code> 目录:</p>
<pre><code>/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f %e' -e modify,delete,create,attrib /usr/local/src</code></pre>
<p><strong>出现变化后执行对应命令</strong></p>
<pre><code class="language-shell">/usr/bin/inotifywait -mrq --timefmt '%y-%m-%d %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib,modify ${src} | while read DATE TIME FILES;
do
echo "At ${DATE} ${TIME},$FILES was backed up via rsync" >> /var/log/rsync_0.109.log
done</code></pre>
<p><code>参数:</code></p>
<table>
<thead>
<tr>
<th>参数</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>-m</td>
<td>持续监听</td>
</tr>
<tr>
<td>-r</td>
<td>使用递归形式监视目录</td>
</tr>
<tr>
<td>-q</td>
<td>减少冗余信息,只打印出需要的信息</td>
</tr>
<tr>
<td>-e</td>
<td>指定要监视的事件,多个时间使用逗号隔开</td>
</tr>
<tr>
<td><code>--timefmt</code></td>
<td>时间格式</td>
</tr>
<tr>
<td><code>--format</code></td>
<td>监听到的文件变化的信息</td>
</tr>
</tbody>
</table>
<p><code>--timefmt</code>说明:</p>
<p>ymd分别表示年月日,H表示小时,M表示分钟</p>
<p><code>--format</code> 说明:</p>
<table>
<thead>
<tr>
<th>参数</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>%w</td>
<td>表示发生事件的目录</td>
</tr>
<tr>
<td>%f</td>
<td>表示发生事件的文件</td>
</tr>
<tr>
<td>%e</td>
<td>表示发生的事件</td>
</tr>
<tr>
<td>%Xe</td>
<td>事件以“X”分隔</td>
</tr>
<tr>
<td>%T</td>
<td>使用由–timefmt定义的时间格式</td>
</tr>
</tbody>
</table>
<p>执行上面的命令之后,在监听的目录下创建一个1.txt文件,得到如下结果:</p>
<pre><code>22/03/18 17:22 /usr/local/src/ 1.txt CREATE
22/03/18 17:22 /usr/local/src/ 1.txt ATTRIB</code></pre>
<p>可监听的时间有:</p>
<table>
<thead>
<tr>
<th>参数</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>access</td>
<td>访问,读取文件。</td>
</tr>
<tr>
<td>modify</td>
<td>修改,文件内容被修改。</td>
</tr>
<tr>
<td>attrib</td>
<td>属性,文件元数据被修改。</td>
</tr>
<tr>
<td>move</td>
<td>移动,对文件进行移动操作。</td>
</tr>
<tr>
<td>create</td>
<td>创建,生成新文件</td>
</tr>
<tr>
<td>open</td>
<td>打开,对文件进行打开操作。</td>
</tr>
<tr>
<td>close</td>
<td>关闭,对文件进行关闭操作。</td>
</tr>
<tr>
<td>delete</td>
<td>删除,文件被删除。</td>
</tr>
</tbody>
</table>
<p><strong>问题</strong></p>
<p>如果在使用过程中出现</p>
<pre><code>/usr/local/bin/inotifywait: error while loading shared libraries: libinotifytools.so.0: cannot open shared object file: No such file or directory</code></pre>
<p>解决方案:</p>
<pre><code>#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</code></pre>