![从 Crontab 运行的脚本发送邮件](https://linux22.com/image/117597/%E4%BB%8E%20Crontab%20%E8%BF%90%E8%A1%8C%E7%9A%84%E8%84%9A%E6%9C%AC%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6.png)
#!/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