当 Postfix 队列为空时断开调制解调器

当 Postfix 队列为空时断开调制解调器

在 /etc/ppp/ip-up.d/script 中,我有以下内容,当 ppp0 接口启动(连接)时运行 fetchmail,当它完成时,调制解调器会自动结束互联网连接。

 #!/bin/sh
 /usr/bin/fetchmail -v -f /etc/fetchmailrc -L /var/log/fetchmail.log
 killall wvdial

这很完美。现在我需要在 fetchmail 命令执行下面的脚本中添加一些内容,检查 postfix 的邮件队列是否完全为空,如果为真,则执行命令 killall wvdial 来挂断调制解调器。

理论上我知道我可以使用 if、else、do、while、until 等来做一些事情,但实际上我不知道如何开发它。我希望你们能帮助我编写并完成这个脚本,使其正常工作。我很感谢你们的评论。

答案1

我不是 Bash 专家,但经过一些快的 研究我想这会满足你的要求:

while [ `find /var/spool/postfix/{deferred,active,maildrop}/ -type f | wc -l` -gt 0 ]; do
    sleep 5
done

这应该每 5 秒循环一次,直到 postfix 队列为空。相应地调整 postfix 文件的路径。

您可能希望将该deferred部分排除在find命令之外,否则导致电子邮件被延迟的任何临时发送错误都会使调制解调器连接保持打开状态,直到重试。

相关内容