Linux 只有当助手检测到文件修改时,我如何让cron给我发电子邮件?

Linux 只有当助手检测到文件修改时,我如何让cron给我发电子邮件?,linux,bash,cron,aide,Linux,Bash,Cron,Aide,我设置了一个crontab。我已经安装了AIDE,我有一个AIDE数据库来检查文件的完整性 如何让cron仅在文件被修改时才给我发送电子邮件 剧本: #!/bin/bash if aide -c /etc/aide/aide.conf --check then echo "AIDE detected no changes" else echo "Alert!: AIDE detected changes!" crontab: * */12 * * * /root/scrip

我设置了一个crontab。我已经安装了AIDE,我有一个AIDE数据库来检查文件的完整性

如何让cron仅在文件被修改时才给我发送电子邮件

剧本:

#!/bin/bash 

if aide -c /etc/aide/aide.conf --check
    then echo "AIDE detected no changes"
else
    echo "Alert!: AIDE detected changes!"
crontab:

* */12 * * * /root/script.sh | mail root@localhost.com 
MAILTO=root@localhost.com
* */12 * * * /root/script.sh 
MAILTO=""
使用MAILTO crontab变量,而不是管道到邮件。然后更改脚本,使其不会输出任何内容,除非出现问题:

#!/bin/bash 
aide -c /etc/aide/aide.conf --check || echo "Alert!: AIDE detected changes!"
crontab:

* */12 * * * /root/script.sh | mail root@localhost.com 
MAILTO=root@localhost.com
* */12 * * * /root/script.sh 
MAILTO=""
注:

您可以使用简单的本地用户名;e、 根。 您需要在系统上设置邮件处理;e、 g.传送到本地邮箱或通过外部SMTP服务提供商(如Gmail)中继。这超出了本问答的范围。 MAILTO=用于停止按照cron规则发送邮件。如果你想让他们那样做,就别提了。它必须是MAILTO=而不是MAILTO=。Cron在这里没有实现shell语法。另一个线索是,可以在=周围加空格,这是shell语法无法做到的。 在crontab中设置变量不是过程的一部分。多年来,cron已经有很多实现,但并非所有实现都支持变量设置。检查man 5 crontab在您的系统上的内容。 或者,你可以使用…|邮件root@localhost.com而不是…|邮政root@localhost.com. 如果正文(即stdin)为空,则将跳过发送邮件

如何让cron仅在文件被修改时才给我发送电子邮件

如果你在Linux上使用本地,例如,考虑使用设备,然后在Debian或Ubuntu上安装INCROND:INCRON软件包和使用.< /P> 请注意,incron和inotify不能在远程文件系统(如或)或伪文件系统(如)上工作

如果不能使用incron,则需要使用cron定期调用的shell脚本

顺便说一句,一些文件,例如/var/run/下的文件,更多信息请参见,经常会被修改。这样处理的数据文件也是如此


关于,请务必阅读其文档。因为它是,甚至,考虑研究,然后改进它的代码,例如使用iNosith. 我们编写了一个Perl脚本,如果出现问题,它会发送一封电子邮件,并更新数据库,使此电子邮件不再发出

#!/usr/bin/perl
my $aide =  "/usr/sbin/aide -c /etc/aide.conf";
my $email = "security\@your-domain.com";
my $timestamp = `/bin/date +\%Y-\%m-\%d.\%H-\%M`;
my $output = "";
my $added = -1;
my $removed = -1;
my $changed = -1;
my $warning = 0;
my $found_no_differences = 0;
open(AIDE, "$aide --check|");
while (my $line=<AIDE>) {
    chomp($line);
    $output = $output.$line."\n";
    if ($line =~ /Added entries\:\s*(\w+)/) { $added = $1; }
    if ($line =~ /Removed entries\:\s*(\w+)/) { $removed = $1; }
    if ($line =~ /Changed entries\:\s*(\w+)/) { $changed = $1; }
    if ($line =~ /WARNING\:/) { $warning = $warning + 1; }
    if ($line =~ /AIDE found NO differences/) { $found_no_differences = 1; }
}
close(AIDE);
if ($found_no_differences > 0) { exit(0); }
if ($added > 0 || $removed > 0 || $changed > 0 || $warning > 0 || $added == -1 || $changed == -1) {
    open MAIL, "|mail -s 'AIDE $timestamp' $email";
    print MAIL $output;
    close MAIL;
    system("$aide --init");
    system("mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz");
}

将未检测到任何更改的echo AIDE替换为:?或,如果!aide-c/etc/aide/aide.conf-check;那么回声警报!:助手检测到变化!菲?或者aide-c/etc/aide/aide.conf-check | | echo Alert!:助手检测到更改!?我认为你需要做的不止这些。在我的系统邮件上foo@bar