监控网站的变化并每天发送电子邮件

时间:2013-08-13 04:28:26

标签: svn cron inotify

我想监视几个站点的更改,基本上通知我添加文件时更改。这样我就可以在发生错误时快速撤消黑客攻击或其他用户所做的更改。我读了很多关于这个主题的内容,我最初明白我应该使用incron or incrontab

问题是incron不会递归搜索,我没有找到一个脚本,当检测到电子邮件时发生了变化,而且我现在还不是Bash星,所以黑客攻击速度很慢。

使用incrontab

递归搜索

我确实发现一些可以在Cyber​​city帮助递归搜索。这是一篇关于在进行更改时使用rsynch编写的文章。我只需要在做出更改时收到电子邮件,以便我可以根据需要做些什么。或者更改记录并在电子邮件地址处进行更改。

正在进行的代码

我每天尝试制作并运行的代码如下:

find /home/user/site.com -type d -print0 | xargs -0 -I{} echo "{} IN_CLOSE_WRITE,IN_CREATE,IN_DELETE email-me '*.tmp' -a /home/user/site.com/ user@www2.example.com:/home/user/site.com/" > /etc/incron.d/webroot.conf

通过电子邮件发送更改

我可能需要弄清楚的是如何发送包含所做更改的电子邮件,并在某个时间每天发送一次这些更改。通过电子邮件发送它有点讨论here。它的代码是mail -s "server change" email@emailaddress.com但我需要的是让它在我的代码段中运行。每天发送它可能就像一个普通的crontab,因此主要问题是在电子邮件中打印并发送它。

问题

所以我的问题是,如何修复此脚本以发送电子邮件更改以及如何让它每天运行?

更新

我被告知我可以用(Sub)版本和cronjob实现所有这些。 Subversion可用于将本地或开发副本与实时副本进行比较,并使用cronjob我可以安排将差异报告发送给我。我知道如何制作一个cronjob,我有以下设置

svn.site.com with repo
dev.site.com with beta site/backup site
site.com live site

我在dev上所做的任何更改都可以使用svn update推送实时网站。

但我现在需要的是一个脚本,用于向我发送与repo或dev网站相比在实际网站上所做的更改。我正在阅读有关差异here的信息。我现在如何比较实时网站和回购,并通过电子邮件将差异发送给我?

@tripleee告诉我cd /path/to/directory; svn diff | mail -s "diff" you@example.com作为一个cronjob会做。我正在研究这个问题。

1 个答案:

答案 0 :(得分:1)

将输出收集到一个文件中,运行每日常规crontab以通过电子邮件发送该文件并将其替换为空文件?

因此,inotify可能过度 - 只需使用版本控制系统并每天早上运行其diff功能(无论如何你应该有版本控制,对吧?):

00 09 * * * cd /path/to/directory && svn diff

将此信息放在拥有/path/to/directory的用户的crontab中;此用户将收到来自Cron的电子邮件差异。如果您想将其重定向到其他位置,请尝试在crontab中设置MAILTO变量,或使用svn diff | mail -s "server change" user@elsewhere.example.com

此解决方案预先假定实际网站是实际的svn结帐,而不是例如svn export的结果。出于安全原因,有些网站不允许这样做(如果现场网站遭到黑客入侵,黑客可以访问您的回购!)但正如我从您的评论中理解的那样,这不是这种情况。