从 Crontab 运行的脚本发送邮件

从 Crontab 运行的脚本发送邮件
#!/BIN/BASH
# To alert whenever lsof crosses 80%

maxlimit=32000
echo 'Max limit is ' $maxlimit
tlimit=$(bc <<< $maxlimit*0.8)
echo 'Treshold limit at 80% ' $tlimit
a=$(lsof | wc -l)
echo 'Current usage ' $a
if [ $(bc <<< "$a > $tlimit") -eq 1 ]
then
        echo 'lsof =' $a 'has exceeded 80% of maximum limit' | /usr/bin/Mail -s "ALERT!!!" "*****@cisco.com"
fi

* * * * * bash /root/vasanth/lsef/script.sh

在上面的脚本中,输出是发送一封邮件到对应的 Mail ID 。

当我手动运行它时,它会发送邮件。

但是,当在 cron 中安排时,邮件不会被发送。

我不明白问题是什么。我该如何调试它?

答案1

类似的 cron 任务的主要问题是,您无法轻松调试它们。

通常,cron 任务应该默默地工作如果没有错误的话,但如果出现任何错误,它们应该非常详细。

扩展 EgorVasilev 的答案,您可以通过以下命令轻松地在 bash 脚本脚本中打开“调试模式”

#!/bin/bash -x
exec 2>>/var/log/cron.log

命令。第一个通过标志解释您的脚本-x,这意味着您将在 stderr 中获得所有已执行的命令。

exec 2>>/var/log/cron.log一个命令什么不执行任何操作,而是以附加模式将标准错误重定向到日志文件中。本质上,shell 解释器使用给定的重定向“重新执行”自身,甚至无需更改脚本执行上下文

答案2

1.第一:使用#!/bin/bash代替#!/BIN/BASH

如果#!/BIN/BASH你运行这样的脚本:

bash script.sh

..一切正常。

但如果你执行:

./script.sh

..你收到一个错误:

-bash: ./script.sh: /BIN/BASH: bad interpreter: No such file or directory

2.执行这个命令:

echo 'PATH='$PATH

将输出添加到脚本的开头。

例子

# echo 'PATH='$PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

相关内容