Не может найти электронные письма полученными fetchmail

Мне удалось воспроизвести проблему снова, и это был результат большого дискового кэша. Мои дисковые кэши могут вырасти больше чем на 8 ГБ и кажутся, что некоторым приложениям не нравится он, и ввод-вывод страдает.

Отбрасывание дисковых кэшей с echo 3 > /proc/sys/vm/drop_caches как корневые средства проблема. Я в настоящее время не знаю, почему большие дисковые кэши вызывают эту неисправность ввода-вывода.

Последнее обновление: После большего количества расследования я узнал, что количество файлов в кэше инициировало проблему. Это повреждало диски при попытке передать много маленьких файлов назад диску. Так как я использовал систему в течение десяти лет, я имею, сделал решающий шаг и переустановил с Debian на 64 бита. Теперь это работает гладко. Это был, вероятно, побочный эффект десяти лет обновления с нахождением пределов операционной системы на 32 бита.

3
01.04.2015, 15:15
2 ответа

Есть параметры, которые вы можете использовать при вызове FetchMail, который сделает его распечатать журналы и информацию о отладке. Вот с страницы человека:

 For troubleshooting, tracing and debugging, you need to increase fetch-
 mail's verbosity to actually see what happens. To do that,  please  run
 both  of  the  two  following commands, adding all of the options you'd
 normally use.


 env LC_ALL=C fetchmail -V -v --nodetach --nosyslog

 (This command line prints in English how  fetchmail  understands
 your configuration.)


 env LC_ALL=C fetchmail -vvv  --nodetach --nosyslog

 (This  command line actually runs fetchmail with verbose English
 output.)

Если FetchMail выполняет и извлеките свой адрес электронной почты и передает его на местную MTA, вы также сможете найти следы этого в / var / log / maillog (или где бы вы ни говорили Ваша система для размещения журналов почты).

3
27.01.2020, 21:23

При sed :

sed '$!N;/^\([^\t]*\t\)\(.*\)\(\n\)\1/!P;s//\3\1\2<br>/;D' <<\IN
word1  some text
word1  some other text
word1  some other other text
word2  more text
word3  even more
word3  and still more
IN

(примечание: при множестве sed вышеуказанный \t побег недействителен и вместо него должен использоваться литерал < tab > )

И если у вас есть GNU sed , вы можете написать его немного проще:

sed -E '$!N;/^(\S+\t)(.*)\n\1/!P;s//\n\1\2<br>/;D' <infile

Если две последовательные строки не начинаются с одного и того же космоса последовательности, то первая из них печатается P . В противном случае промежуточная новая линия перемещается в начало строки, и соответствующая строка сразу после нее (для включения вкладки) заменяется строкой < br > .

Обратите внимание, что метод stacking , используемый здесь, может иметь последствия для производительности, если линия, которую sed собирает, растет очень долго. Если это вырастет еще, чем 8 КБ тогда, то это превысит минимальный космический размер буфера образца, определенный POSIX.

Независимо от того, какая из двух возможностей возникла, последняя из всех sed D удаляет до первого встречающегося символа \n ewline в образец пространстве и начинает с того, что осталось. И если две последовательные строки не начинаются с идентичных последовательностей то первая печатается и удаляется, в противном случае выполняется подстановка, и при удалении D удаляется только линия \n ewline, которая ранее их разделяла.

Поэтому приведенная выше команда печатает:

word1  some text<br>some other text<br>some other other text
word2  more text
word3  even more<br>and still more

Я использовал < <\HERE _ DOC для ввода выше, но, вероятно, вы должны удалить все из < <\IN и использовать вместо этого.

-121--54065-

Bash имеет опцию -s для проверки существования и размера больше нуля:

 -s file
          True if file exists and has a size greater than zero.

, чтобы можно было выполнить

if [ -s "${array_export_files[$loopcount]}" ]; then
   sed .......
fi

в цикле. Поскольку , если [«$ loopcount» -eq «$ loopcount»] всегда верно, вы можете просто заменить это:

while [ "$loopcount" -le "$loopmax" ]
do 
    if [ -s "${array_export_files[$loopcount]}" ]
    then
        sed -e 's/ *| */|/g' "${array_export_files[$loopcount]}" >>" $TEMPDIR/export_file_${testid}_${loopcount}_$$"
        tr "|" "\t" <"export_file_${testid}_${loopcount}_$$">"${array_export_files[$loopcount]}"
        cp "${array_export_files[$loopcount]}" "export_file_${loopcount}_${testid}"
        echo "Testing Starts Here"
        echo "${array_export_files[$loopcount]}" "export_file_${loopcount}_${testid}"
        echo "Testing Ends Here"
    fi
    (( loopcount = loopcount + 1 ))
done
-121--166671-

Помимо ответа Дженни, позволяющего наблюдать за плечом fetchmail . Хорошее указание на то, что сообщения электронной почты извлекаются, если они больше не находятся на сервере IMAP. Для проверки возможности подключения к IMAP-клиенту или поиска в каталоге Mail на сервере (например, ~/Maildir ).

На стороне клиента fetchmail , вероятно, хранит почту в /var/spool/mail , если только вы не наборами MTA. для доставки, например, через procmail , в более позднем случае получатели ~/.procmailrc определяют, куда идут вещи.

Если вы не можете проследить, куда идут дела. Проверьте журнал электронной почты (при получении сообщений электронной почты). В качестве последнего средства можно также коснуться файла («/var/tmp/now », запустить fetchmail и использовать find/-newer/var/tmp/now для поиска недавно созданных/обновленных файлов в системе.

0
27.01.2020, 21:23

Теги

Похожие вопросы