You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

640 lines
17 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!doctype html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="author" content="Lednerb">
<meta name="description" content="Bilberry Premium Theme for Hugo.">
<meta name="keywords" content="blog,personal,responsive,search,font awesome,pages,posts,multilingual,highlight.js,syntax highlighting,premium,shortcuts">
<meta name="generator" content="Hugo 0.50" />
<title> [筆記] CentOS Linux 底下,偵測檔案內容異動 發信通知 | My cool new Blog</title>
<meta name="description" content="[筆記] CentOS Linux 底下,偵測檔案內容異動 發信通知 - Bilberry Premium Theme for Hugo.">
<meta itemprop="name" content="[筆記] CentOS Linux 底下,偵測檔案內容異動 發信通知">
<meta itemprop="description" content="[筆記] CentOS Linux 底下,偵測檔案內容異動 發信通知 - Bilberry Premium Theme for Hugo.">
<meta property="og:title" content="[筆記] CentOS Linux 底下,偵測檔案內容異動 發信通知">
<meta property="og:description" content="[筆記] CentOS Linux 底下,偵測檔案內容異動 發信通知 - Bilberry Premium Theme for Hugo.">
<meta property="og:image" content="https://www.gravatar.com/avatar/88188b6cc451928eba90e8400bc68086?size=200">
<meta property="og:url" content="https://h.cowbay.org/article/e7-ad-86-e8-a8-98-centos-linux-e5-ba-95-e4-b8-8b-ef-bc-8c-e5-81-b5-e6-b8-ac-e6-aa-94-e6-a1-88-e5-85-a7-e5-ae-b9-e7-95-b0-e5-8b-95-e7-99-bc-e4-bf-a1-e9-80-9a-e7-9f-a5/">
<meta property="og:site_name" content="My cool new Blog">
<meta property="og:type" content="article">
<link rel="icon" type="image/png" href="https://h.cowbay.org/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://h.cowbay.org/favicon-16x16.png" sizes="16x16">
<link rel="stylesheet" href="https://h.cowbay.org/sass/combined.min.717098cb5503581e75f12e486a847ca410bf8367d4d8713f4c37affc868c5a1d.css">
</head>
<body class="bilberry-hugo-theme">
<nav>
<div class="container">
<ul class="topnav">
<li><a href="/page/about-bilberry/">About Bilberry</a></li>
<li><a href="https://github.com/Lednerb/bilberry-hugo-theme" target="_blank">Github</a></li>
</ul>
<div id="search-box" class="search">
<i class="fa fa-search"></i>
<input id="search" type="text" placeholder="Search ...">
</div>
</div>
</nav>
<header>
<div class="container">
<div class="logo">
<a href="/" class="logo">
<img src="https://www.gravatar.com/avatar/88188b6cc451928eba90e8400bc68086?d=mm&size=200" alt="">
<span class="overlay"><i class="fa fa-home"></i></span>
</a>
</div>
<div class="titles">
<h3 class="title"><a href="/">My cool new Blog</a></h3>
<span class="subtitle">Hello World! This is the most epic subtitle ever.</span>
</div>
<div class="languages">
<a href="/en" class="active">en</a>
<a href="/de">de</a>
</div>
<div class="toggler">
<i class="fa fa-bars" aria-hidden="true"></i>
</div>
</div>
</header>
<div class="main container">
<div class="article-wrapper u-cf single">
<a class="bubble" href="/article/e7-ad-86-e8-a8-98-centos-linux-e5-ba-95-e4-b8-8b-ef-bc-8c-e5-81-b5-e6-b8-ac-e6-aa-94-e6-a1-88-e5-85-a7-e5-ae-b9-e7-95-b0-e5-8b-95-e7-99-bc-e4-bf-a1-e9-80-9a-e7-9f-a5/">
<i class="fa fa-fw fa-pencil"></i>
</a>
<article class="default article">
<div class="content">
<h3><a href="/article/e7-ad-86-e8-a8-98-centos-linux-e5-ba-95-e4-b8-8b-ef-bc-8c-e5-81-b5-e6-b8-ac-e6-aa-94-e6-a1-88-e5-85-a7-e5-ae-b9-e7-95-b0-e5-8b-95-e7-99-bc-e4-bf-a1-e9-80-9a-e7-9f-a5/">[筆記] CentOS Linux 底下,偵測檔案內容異動 發信通知</a></h3>
<div class="meta">
<span class="date moment">2017-01-12</span>
<span class="categories">
<a href="/categories/%E5%B7%A5%E4%BD%9C%E7%AD%86%E8%A8%98">工作筆記</a>
</span>
</div>
<p>最近在玩很久以前弄好的Smokeping裡面的Notify功能希望能在VPN斷線的時候第一時間得到訊息</p>
<p>雖然設定好了但感覺Smokeping在送出警告信件的速度有點慢</p>
<p>所以另外找了個方法去檢查 smokeping.log當檔案內容有異動時就會發信通知然後放到crontab裡每分鐘檢查一次</p>
<p>程式內容如下</p>
<p>&nbsp;
&gt; #!/usr/bin/env bash
&gt;
&gt; #
&gt;
&gt; # Provides      : Check if a file is changed
&gt;
&gt; #
&gt;
&gt; # Limitations   : none
&gt;
&gt; # Options       : none
&gt;
&gt; # Requirements  : bash, md5sum, cut
&gt;
&gt; #
&gt;
&gt; # Modified      : 11|07|2014
&gt;
&gt; # Author        : ItsMe
&gt;
&gt; # Reply to      : n/a in public
&gt;
&gt; #
&gt;
&gt; # Editor        : joe
&gt;
&gt; #
&gt;
&gt; #####################################
&gt;
&gt; #
&gt;
&gt; # OK - lets work
&gt;
&gt; #
&gt;
&gt;
&gt; # what file do we want to monitor?
&gt;
&gt; # I did not include commandline options
&gt;
&gt; # but its easy to catch a command line option
&gt;
&gt; # and replace the defaul given here
&gt;
&gt; file=/var/log/smokeping.log #設定要監控的目標檔案
&gt;
&gt;
&gt; # path to file&rsquo;s saved md5sum
&gt;
&gt; # I did not spend much effort in naming this file
&gt;
&gt; # if you ahve to test multiple files
&gt;
&gt; # so just use a commandline option and use the given
&gt;
&gt; # file name like: filename=$(basename &ldquo;$file&rdquo;)
&gt;
&gt; fingerprintfile=/tmp/.bla.md5savefile #md5計算結果暫存檔
&gt;
&gt;
&gt; # does the file exist? #檢查目標檔案是否存在
&gt;
&gt; if [ ! -f $file ]
&gt;
&gt; then
&gt;
&gt; echo &ldquo;ERROR: $file does not exist - aborting&rdquo;
&gt;
&gt; exit 1
&gt;
&gt; fi
&gt;
&gt; # create the md5sum from the file to check #計算目標檔案的md5 checksum
&gt;
&gt; filemd5=<code>md5sum $file | cut -d &quot; &quot; -f1</code>
&gt;
&gt;
&gt; # check the md5 and
&gt;
&gt; # show an error when we check an empty file #確認不是空檔案
&gt;
&gt; if [ -z $filemd5 ]
&gt;
&gt; then
&gt;
&gt; echo &ldquo;The file is empty - aborting&rdquo;
&gt;
&gt; exit 1
&gt;
&gt; else
&gt;
&gt; # pass silent
&gt;
&gt; :
&gt;
&gt; fi
&gt;
&gt;
&gt; # do we have allready an saved fingerprint of this file?
&gt;
&gt; if [ -f $fingerprintfile ]
&gt;
&gt; then
&gt;
&gt; # yup - get the saved md5
&gt;
&gt; savedmd5=<code>cat $fingerprintfile</code>
&gt;
&gt;
&gt; # check again if its empty
&gt;
&gt; if [ -z $savedmd5 ]
&gt;
&gt; then
&gt;
&gt; echo &ldquo;The file is empty - aborting&rdquo;
&gt;
&gt; exit 1
&gt;
&gt; fi
&gt;
&gt;
&gt; #compare the saved md5 with the one we have now #比對暫存檔和目標檔案的check sum , 如果不相符就寄出信件並附上最後一行
&gt;
&gt; if [ &ldquo;$savedmd5&rdquo; = &ldquo;$filemd5&rdquo; ]
&gt;
&gt; then
&gt;
&gt; # pass silent
&gt;
&gt; :
&gt;
&gt; else
&gt;
&gt; # echo &ldquo;File has been changed&rdquo;
&gt;
&gt; tail -1 /var/log/smokeping.log |mail -s &lsquo;Alert&rsquo; -v chchang@[192.168.10.240]
&gt;
&gt;
&gt; # this does an beep on your pc speaker (probably)
&gt;
&gt; # you get this character when you do:
&gt;
&gt; # CTRL+V CTRL+G
&gt;
&gt; fi
&gt;
&gt;
&gt; # do we have allready an saved fingerprint of this file?
&gt;
&gt; if [ -f $fingerprintfile ]
&gt;
&gt; then
&gt;
&gt; # yup - get the saved md5
&gt;
&gt; savedmd5=<code>cat $fingerprintfile</code>
&gt;
&gt;
&gt; # check again if its empty
&gt;
&gt; if [ -z $savedmd5 ]
&gt;
&gt; then
&gt;
&gt; echo &ldquo;The file is empty - aborting&rdquo;
&gt;
&gt; exit 1
&gt;
&gt; fi
&gt;
&gt;
&gt; #compare the saved md5 with the one we have now
&gt;
&gt; if [ &ldquo;$savedmd5&rdquo; = &ldquo;$filemd5&rdquo; ]
&gt;
&gt; then
&gt;
&gt; # pass silent
&gt;
&gt; :
&gt;
&gt; else
&gt;
&gt; # echo &ldquo;File has been changed&rdquo;
&gt;
&gt; tail -1 /var/log/smokeping.log |mail -s &lsquo;Alert&rsquo; -v chchang@[192.168.10.240]
&gt;
&gt;
&gt; # this does an beep on your pc speaker (probably)
&gt;
&gt; # you get this character when you do:
&gt;
&gt; # CTRL+V CTRL+G
&gt;
&gt; # this is a bit creepy so you can use the &lsquo;beep&rsquo; command
&gt;
&gt; # of your distro
&gt;
&gt; # or run some command you want to
&gt;
&gt; echo
&gt;
&gt; fi
&gt;
&gt;
&gt; fi
&gt;
&gt;
&gt; # save the current md5
&gt;
&gt; # sure you don&rsquo;t have to do this when the file hasn&rsquo;t changed
&gt;
&gt; # but you know I&rsquo;m lazy and it works&hellip;
&gt;
&gt; echo $filemd5 &gt; $fingerprintfile
&nbsp;</p>
<p>編輯好之後就放到crontab去</p>
<p>不過後來覺得有點脫褲子放屁了</p>
<p>實際的狀況會是這樣由Smokeping發出的信件和這個偵測機制發出的信件其實也沒差幾秒鐘</p>
<p>似乎不必另外去偵測了</p>
<p><img src="http://wp.cowbay.org/wp-content/uploads/2017/01/2017-01-17_08-48-56.png" alt="2017-01-17_08-48-56" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
<div class="footer no-tags">
</div>
</article>
</div>
<div id="disqus_thread"></div>
<script type="application/javascript">
var disqus_config = function () {
};
(function() {
if (["localhost", "127.0.0.1"].indexOf(window.location.hostname) != -1) {
document.getElementById('disqus_thread').innerHTML = 'Disqus comments not available by default when the website is previewed locally.';
return;
}
var d = document, s = d.createElement('script'); s.async = true;
s.src = '//' + "bilberry-hugo-theme" + '.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
<a href="https://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
</div>
<footer>
<div class="container">
<div class="recent-posts">
<strong>Latest posts</strong>
<ul>
<li>
<a href="/article/google-550-5-7-1-sloution/">寄信給google被退信 錯誤 550-5.7.1的解法</a>
</li>
<li>
<a href="/article/netdata-linux-system-performance-monitor-dashboard/">Netdata Linux System Performance Monitor Dashboard</a>
</li>
<li>
<a href="/article/linux-performance-monitor-dashboard-netdata-md/">Linux 底下極其詳細的System performace Monitor Dashboard - Netdata</a>
</li>
<li>
<a href="/article/syntax-test/">Syntax Test</a>
</li>
<li>
<a href="/article/psql-create-role-and-assign-priviledges/">psql create role and assign priviledges</a>
</li>
<li>
<a href="/article/study-url/">Study URL</a>
</li>
<li>
<a href="/article/rsync-time-backup/">[筆記] Linux 底下好用的備份工具 rsync-time-backup</a>
</li>
</ul>
</div>
<div class="categories">
<a href="/categories/"><strong>Categories</strong></a>
<ul>
<li>
<a href="/categories/%E6%9C%AA%E5%88%86%E9%A1%9E">未分類 (86)</a>
</li>
<li>
<a href="/categories/%E5%B7%A5%E4%BD%9C%E7%AD%86%E8%A8%98">工作筆記 (68)</a>
</li>
<li>
<a href="/categories/%E5%85%B6%E4%BB%96">其他 (46)</a>
</li>
<li>
<a href="/categories/%E7%AD%86%E8%A8%98">筆記 (30)</a>
</li>
<li>
<a href="/categories/%E5%89%AA%E5%A0%B1">剪報 (18)</a>
</li>
<li>
<a href="/categories/starting">Starting (5)</a>
</li>
<li>
<a href="/categories/blog">Blog (4)</a>
</li>
</ul>
</div>
<div class="right">
<div class="external-profiles">
<strong>Social media</strong>
<a href="https://twitter.com/TheRealLednerb" target="_blank"><i class="fa fa-twitter-adblock-proof"></i></a>
<a href="https://github.com/Lednerb" target="_blank"><i class="fa fa-github"></i></a>
</div>
<div class="languages">
<strong>Other languages</strong>
<a href="/en" class="active">en</a>
<a href="/de">de</a>
</div>
</div>
</div>
</footer>
<div class="credits">
<div class="container">
<div class="copyright">
<a href="https://github.com/Lednerb" target="_blank">
&copy;
2017
by Lednerb
</a>
</div>
<div class="author">
<a href="https://github.com/Lednerb/bilberry-hugo-theme" target="_blank">Bilberry Hugo Theme</a>
</div>
</div>
</div>
<script type="text/javascript" src="https://h.cowbay.org/js/externalDependencies.39c47e10e241eae2947b3fe21809c572.js" integrity="md5-OcR&#43;EOJB6uKUez/iGAnFcg=="></script>
<script type="text/javascript" src="https://h.cowbay.org/js/theme.ff50ae6dc1bfc220b23bf69dbb41b54e.js" integrity="md5-/1CubcG/wiCyO/adu0G1Tg=="></script>
<script>
$(".moment").each(function() {
$(this).text(
moment( $(this).text() )
.locale( "en" )
.format('LL')
);
});
$(".footnote-return sup").html("");
</script>
<script>
var client = algoliasearch("Y2C4RWMPXW", "50ea7f8c41c0ad233926e0be2b769ed1");
var index = client.initIndex("default-content");
$('#search').autocomplete({ hint: false, autoselect: true, debug: false },
[
{
source: $.fn.autocomplete.sources.hits(index, { hitsPerPage: 5, filters: 'language: en' }),
displayKey: function(suggestion) {
return suggestion.title || suggestion.author
},
templates: {
suggestion: function(suggestion) {
return "<span class='entry " + suggestion.type + "'>"
+ "<span class='title'>" + suggestion.title + "</span>"
+ "<span class='fa fa-fw " + suggestion.iconClass + "'></span>"
+ "</span>"
;
},
empty: function() {
return "<span class='empty'>Nothing found.</span>"
},
footer: function() {
return '<div class="branding">Powered by <img src="https:\/\/h.cowbay.org\/dist\/algolia-logo-light.svg" /></div>'
}
},
}
])
.on('autocomplete:selected', function(event, suggestion, dataset) {
window.location = (suggestion.url);
})
.keypress(function (event, suggestion) {
if (event.which == 13) {
window.location = (suggestion.url);
}
});
</script>
</body>
</html>