в /etc/ppp/ip-up.d/script у меня есть следующее, что запускает fetchmail, когда интерфейс ppp0 включен (подключен), и когда он завершает работу, модем автоматически завершает подключение к Интернету.
#!/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 и т. Д., Но на практике я не знаю, как это разработать. Я хотел бы, чтобы вы помогли мне запрограммировать и завершить этот скрипт, чтобы он работал правильно. Я ценю комментарии.
Я не специалист в bash, но после некоторого быстрый исследовательская работа Я думаю, это сделает то, что вы хотите:
while [ `find /var/spool/postfix/{deferred,active,maildrop}/ -type f | wc -l` -gt 0 ]; do
sleep 5
done
Это должно повторяться каждые 5 секунд, пока очереди постфиксов не опустеют. Соответственно измените свой путь к постфиксным файлам.
Вы можете оставить deferred
часть из find
В противном случае любые ошибки временной отправки, вызывающие задержку отправки электронной почты, будут держать модемное соединение открытым до тех пор, пока оно не повторит попытку.