我一直在创建一个脚本来扫描 Linux 服务器上的一系列邮箱,找到邮箱中包含超过 250 封电子邮件的邮箱,然后发送一封电子邮件,其中包含这些邮箱的名称以及每个邮箱有多少封邮件。
以下是执行该操作的 mailboxcounter 脚本:
ls /path to mailboxes/ -lR | grep rw | awk '{count[$3]++} END {for (word in count) if (count[word] > 250) print word, count[word]}'
然后我尝试创建一个 cronjob,以便定期发送包含符合脚本条件的邮箱的电子邮件。我将其设置为每 5 分钟运行一次,仅用于测试目的。
这是那个 cronjob:
*/5 * * * * /usr/sbin/sendmail [email protected] < <( bash /path/mailboxcounter.sh ) >/dev/null 2>&1
我第一次运行 cronjob 时,它运行完美,但在第一封电子邮件之后它再也没有发送过其他电子邮件,更不用说每 5 分钟发送一次了。此外,我尝试添加一些字符串来清理我的原始脚本,如下所示:
ls /path to mailboxes/ -lR | grep rw | awk '{count[$3]++} END {for (word in count) if (count[word] > 25) print "Name: " word",", "emails in mailbox: " count[word]}'
但是添加这些字符串后,cronjob 将不再发送任何电子邮件。
我尝试过使用 mail 命令并确认服务器上安装了 mailx,但它似乎根本不起作用,所以我一直坚持使用 sendmail。
我在这里遗漏了什么?我该如何修复它,以便 cronjob 能够定期发送电子邮件,同时将更具描述性的字符串添加到我的原始脚本中,而不会导致发送电子邮件失败?我觉得我已经接近成功了,但经过反复试验,我还是失败了。任何帮助都将不胜感激。
答案1
来自手册页
Sendmail 并非旨在用作用户界面例程;其他程序提供了用户友好的前端;sendmail 仅用于传递预先格式化的消息
这样您就可以重新格式化您的消息或更好地使用mail
、、mailx
等mutt
。
更新
使用这些命令的一些示例可以在以下位置找到https://www.linuxjournal.com/content/sending-emailssend-them-linux-terminal
答案2
我能够利用 mailx 而不是 sendmail 来解决这个问题。
解决方案 cronjob 的示例:
20 8 * * wed . ~/.bash_profile && cd /path | /path/mailboxcounter.sh | mail -s "Mailbox Counts" [email protected]