在检查发送电子邮件之后,我用一个简单的脚本来检查是否有超过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
答案 0 :(得分:0)
您是否尝试过运行此脚本?
BASEDIR
和LOGFILE
中的重音符(`)表示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
使用它,请尝试手动运行脚本以查看它们。