如果文件不存在则按 Cron 发送电子邮件

如果文件不存在则按 Cron 发送电子邮件

我有一份cron工作,执行如下的 shell 脚本

00 01 * * * sh /backup/script.sh

现在我需要添加一个功能,cron以便如果该脚本不存在,那么它会使用sendmail实用程序通过电子邮件向我生成警报。

就像是

00 01 * * * find script and execute script or if find no result then email.

答案1

我看到两种通用解决方案。一种是让 cron 通知您它运行的命令的结果。具体来说,crontab(5) 手册页指出

如果 cron(8) 有理由在“此”crontab 中运行命令后发送邮件,它将查看 MAILTO。如果定义了 MAILTO(且非空),则将向指定用户发送邮件。

只需在 crontab 文件的开头添加如下一行:

[email protected]

或者,如果您想要一个更专业的解决方案,您可以创建一个脚本并将其放在可以保证找到的位置(例如/bin)。脚本本身会检查实际脚本是否存在,如果是,则运行它,如果不存在,则向您发送通知。类似以下内容:

#!/bin/bash

myscript=/path/to/your/script
[email protected]

if [ -f "$myscript" ] ; then
    exec "$myscript"
else
    mail -s "Error running $myscript" $myemail <<EOF
There was an error running the script
$myscript
The script could not be found
EOF
fi

你甚至可以让它变得通用:

#!/bin/bash

myscript=$1
shift 1
params=$*
[email protected]

if [ -f "$myscript" ] ; then
    exec "$myscript $*"
else
    mail -s "Error running $myscript" $myemail <<EOF
There was an error running the script
$myscript
The script could not be found
EOF
fi

答案2

cron 已经为你做了这件事。你的 crontab 条目显示:

00 01 * * * sh /backup/script.sh

在预定的时间,cron 将执行您指定的命令并通过电子邮件向您发送其输出。

的输出sh /does/not/exist为:sh: 0: Can't open /does/not/exist。因此,如果文件不存在,cron 将通过电子邮件向您发送以下内容。

您可能需要确保您的系统已正确配置电子邮件,以便 cron 能够成功向您发送电子邮件。您提到了 sendmail;如果 sendmail 配置正确,并且能够向您的用户发送电子邮件,那么 cron 也将正常工作。

MAILTO如果您需要向其他地址发送电子邮件,或者无法向用户发送电子邮件,但可以向特定的 Internet 电子邮件地址发送电子邮件,此变量也会有所帮助。只需[email protected]在现有行上方添加此行即可。

答案3

好吧,你需要另一个脚本。像这样:

#!/bin/bash

file="/path/to/script.sh"

# if script.sh exists and is executable.
if [ -x $file ]; then
    # execute script.sh
    sh /path/to/script.sh
else 
    #send mail
    echo "script.sh doesn't exists or is not executable" | sendmail [email protected]
fi

相关内容