如何在 Linux 中设置 cronjob 并自动发送电子邮件?

如何在 Linux 中设置 cronjob 并自动发送电子邮件?

我一直在创建一个脚本来扫描 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、、mailxmutt

更新

使用这些命令的一些示例可以在以下位置找到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]

相关内容