使用diff检查crontab更改的脚本

时间:2014-07-24 10:51:18

标签: linux crontab

我需要一个脚本,需要以一种方式查找文件中当前crontab的副本,然后每天都需要使用cron tab副本,并且需要使用“diff”命令进行比较它不匹配需要发送警报邮件。任何人都可以帮我这个吗?

目前我正在使用下面的脚本但是这个脚本的问题是它发送警报,即使在crontab中进行的更改是正确的。但是我想使用diff命令比较内容。所以这个脚本不适合我的要求

#!/bin/sh
    export smtp=smtprelay.intra.coriant.com:25
    CROND=/home/ssx00001
    ALERT=redmine@coriant.com
    checkf=last.crontab.check
    if [ -f $checkf ]
    then
    find $CROND -type f -newer $checkf | while read tabfile
    do
        echo "Crontab file for Redmine has changed" | mail -s "Crontab changed" $ALERT
    done
    fi
    touch $CHECKF

2 个答案:

答案 0 :(得分:0)

您遇到的问题是diff命令需要两个文件进行比较。如果不保存要检查的旧版本文件,则无法检查文件中的更改。 crontab命令不会执行此操作。

最好的办法是在crontab命令周围编写一个包装器,保存原始crontab文件的副本,运行crontab以编辑和安装新文件,然后运行diff使用您保存的文件。

答案 1 :(得分:0)

#!/bin/sh
export smtp=smtprelay.intra.coriant.com:25
ALERT=redmine@coriant.com
crontab -l > /home/ssx00001/y.txt
cat y.txt
diff /home/ssx00001/x.txt  /home/ssx00001/y.txt > /home/ssx00001/z.txt
ab=`cat z.txt | wc -l`
echo $ab
if [[ $ab != 0 ]]; then
echo "Crontab for Redmine has changed" | mail  -s "Crontab modified" $ALERT
fi

/home/ssx00001是存储文件的路径?) 另外在/ home / ssx00001中创建一个x.txt文件,其中包含当前cronjobs的数据