【问题标题】:Script to check the change of crontab using diff使用 diff 检查 crontab 更改的脚本
【发布时间】:2014-07-24 22:47:09
【问题描述】:

我需要一个脚本,它需要以一种方式查看文件中当前 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

【问题讨论】:

  • @fedoqui:从上面的问题中得到了上面的脚本,但我的要求不同......它需要使用diff命令......
  • 那只是检查文件上的时间戳是否改变了,而不是文件本身是否真的改变了......

标签: linux crontab


【解决方案1】:
#!/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 的数据

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 谢谢hymie,有任何示例代码段吗?这样对我有很大帮助
    猜你喜欢
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多