bash脚本检查文件是否存在并发送信息电子邮件

时间:2016-02-06 09:58:24

标签: bash shell timestamp

在检查发送电子邮件之后,我用一个简单的脚本来检查是否有超过6小时的dirctoey中存在某些文件(以.txt结尾)。 脚本不能正常工作,正如预期的那样,我问你是否有一些更简单,更强大的方法来做到这一点?基本上它只需要检查文件是否存在.txt存在且是否超过6小时,如果是,则应发送电子邮件。

这是我的剧本

#!/bin/bash

DATE=`date +%Y.%m.%d-%H.%M`
HOSTNAME='host'
BASEDIR=`/usr/local/se/work/jobs/`
LOGFILE=`/usr/local/se/work/jobs/logs/jobs.log`
VERTEILER="anyemail"
# Functions
#
# function check if the jobs are exists

'find ${BASEDIR} -name "*.txt" -nmin +354' 2>$1 >>$LOGFILE

#function mail
cat << EOF | mailx -s "Example ${HOSTNAME} jobs `date +%Y.%m.%d-%H.%M`" -a ${LOGFILE} ${VERTEILER}

Hi,

Please check the Jobs.

Details :

`ls -ltr /usr/local/se/work/jobs/`

------------      END       ----------------------------------------
.
Thank you

2 个答案:

答案 0 :(得分:0)

您是否尝试过运行此脚本?

BASEDIRLOGFILE中的重音符(`)表示shell会尝试将它们评估为失败的命令。您通常不需要在shell脚本中使用字符串引号,尽管使用双引号(“)可能被认为是一种好习惯。

HOSTNAME=host
BASEDIR=/usr/local/se/work/jobs
LOGFILE=${LOGFILE}/logs/jobs.log
VERTEILER=anyemail

切换为在被叫mmin而不是nmin中按分钟搜索文件 - 再次应该给您一个错误。数学是错误的,如果你想要6个小时,那么6 * 60 = 360分钟。

find ${BASEDIR} -name *.txt -mmin +360

您正在将stderr重定向到第一个输入参数。 (2>$1)你是否期望从这个命令输出错误,你能解释一下这里发生了什么吗?

然后将其附加到LOGFILE,该mkdir -p位于可能不存在的目录中。 mkdir -p /usr/local/se/work/jobs/logs 是在脚本中创建文件夹的不错选择,因为它在需要时创建父目录,如果文件夹已存在则不会抱怨。所以做一些

的事情
Expect an indented Block

答案 1 :(得分:0)

要将STDERR重定向到STDOUT使用2>&1,您错误地使用了2>$1

另外,查找的正确参数是-mmin而非-nmin,就像您的代码中一样。

您还有更多语法错误:

BASEDIR=`/usr/local/se/work/jobs/`
LOGFILE=`/usr/local/se/work/jobs/logs/jobs.log`

您打字的意思是:

BASEDIR='/usr/local/se/work/jobs/'
LOGFILE='/usr/local/se/work/jobs/logs/jobs.log'

当您使用backticks bash尝试执行COMMAND时,您正在以正确的方式使用它:

DATE=`date +%Y.%m.%d-%H.%M`

你也没有关闭heredoc <<EOF,你需要在脚本的最后一行EOF

并丢失''命令周围的find

你应该注意bash说的内容,它应该提示很多错误,如果你通过cron使用它,请尝试手动运行脚本以查看它们。