Назад | Перейти на главную страницу

Отключить модем, когда очередь постфикса пуста

в /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 В противном случае любые ошибки временной отправки, вызывающие задержку отправки электронной почты, будут держать модемное соединение открытым до тех пор, пока оно не повторит попытку.