Мне удалось воспроизвести проблему снова, и это был результат большого дискового кэша. Мои дисковые кэши могут вырасти больше чем на 8 ГБ и кажутся, что некоторым приложениям не нравится он, и ввод-вывод страдает.
Отбрасывание дисковых кэшей с echo 3 > /proc/sys/vm/drop_caches
как корневые средства проблема. Я в настоящее время не знаю, почему большие дисковые кэши вызывают эту неисправность ввода-вывода.
Последнее обновление: После большего количества расследования я узнал, что количество файлов в кэше инициировало проблему. Это повреждало диски при попытке передать много маленьких файлов назад диску. Так как я использовал систему в течение десяти лет, я имею, сделал решающий шаг и переустановил с Debian на 64 бита. Теперь это работает гладко. Это был, вероятно, побочный эффект десяти лет обновления с нахождением пределов операционной системы на 32 бита.
Есть параметры, которые вы можете использовать при вызове 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 (или где бы вы ни говорили Ваша система для размещения журналов почты).
При 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
и использовать вместо этого.
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
для поиска недавно созданных/обновленных файлов в системе.