gpt4 book ai didi

linux - Cronjob 调用 Shell 脚本发送空邮件

转载 作者:太空宇宙 更新时间:2023-11-04 10:47:02 25 4
gpt4 key购买 nike

我编写了一个 shell 脚本来检查存储设备中的文件系统并将输出发送到特定的电子邮件。当我手动执行它时,它运行良好并且我收到了包含有效内容的电子邮件。但是,当我将它放在同一个用户的 cronjob 中时,它发送的是空邮件。我无法找出缺少的东西。即使我为 root 用户安排了 cronjob,同样的问题仍然存在。下面是我的脚本:

$ cat qmon.sh
nas_fs -list \
| grep -v ckpt_ \
| grep -v root_ \
| awk '{print $6}' >filesystem_list
for i in `cat filesystem_list`
do
nas_quotas -report -tree -fs $i \
| egrep -i -B18 'mins|day|exp' >>quota_exp
done
cat quota_exp \
| mail -s "FF VNX01 Quota report" storagemgmt@mycompany.com
cat /dev/null >quota_exp

最佳答案

首先,你为什么不使用 cron 的内置邮件功能?每当 cronjob 产生任何输出时,它都会通过电子邮件发送给运行该作业的用户。

这也非常适合调试,因为它的电子邮件可能会提示您出了什么问题(例如,cron 找不到 qmon.sh 脚本;或者它没有运行权限它...)。所以要做的第一件事就是检查 cronttab 用户是否已经收到了一些电子邮件!

然后您可以直接使用邮件功能来代替对 mail 的调用:只需设置 crontab 用户即可将电子邮件重定向到所需地址。

关于脚本:

  • 在脚本中添加一个 shebang 是一个很好的做法,这样就很清楚应该由哪个解释器来运行它 (#!/bin/sh)
  • 您无缘无故地使用了很多临时文件,因此请尝试使用管道而不是文件:

这是您的脚本的修订版:

$ cat qmon.sh
#!/bin/sh

nas_fs -list \
| grep -v ckpt_ \
| grep -v root_ \
| awk '{print $6}' \
| while read fs
do
nas_quotas -report -tree -fs "${fs}" \
| egrep -i -B18 'mins|day|exp'
done

如果您坚持手动发送邮件,只需附加| mail -s "FF VNX01 Quota report"storagemgmt@example.com 到最后 done

关于linux - Cronjob 调用 Shell 脚本发送空邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32718901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com