我编写了一个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
答案 0 :(得分:1)
首先,为什么不使用cron的内置邮件功能? 每当cronjob产生任何输出时,它将被发送给每个电子邮件运行作业的用户。
这对于调试也很有用,因为它可能会给你提示你出现了什么问题(例如cron找不到qmon.sh
脚本;或者它没有运行它的权限......) 。
所以要做的第一件事就是检查cronttab用户是否已经收到了一些电子邮件!
然后,您可以直接使用邮件功能将您的呼叫替换为mail
:只需设置crontab用户即可将电子邮件重定向到所需的地址。
关于脚本:
#!/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
答案 1 :(得分:0)
您在一个文件夹中运行它(您或运行该作业的用户)无权写入quota_exp
文件。你可以写/tmp
,比如
nas_fs -list |grep -v ckpt_ |grep -v root_ |awk '{print $6}' >/tmp/filesystem_list
for i in `cat /tmp/filesystem_list`;
do nas_quotas -report -tree -fs $i |egrep -i -B18 'mins|day|exp' >>/tmp/quota_exp; done
cat /tmp/quota_exp |mail -s "FF VNX01 Quota report" storagemgmt@mycompany.com
rm /tmp/quota_exp
rm /tmp/filesystem_list