Corrigindo problema de bloqueio de arquivo intermitente no Procmail

1

Alguém viu o seguinte problema com os tempos limite de bloqueio do arquivo do procmail ao gravar em um arquivo mbox? Isso ocorre a cada duas semanas para um usuário com o seguinte procmailrc:

:0 c:     #copy all mail to "bkp"
bkp

Na maioria das vezes, isso funciona sem problemas. A cada poucas semanas, o a seguinte mensagem aparece no log do procmail:

procmail: Forcing lock on "bkp"
procmail: Timeout, was waiting for "bkp"

Às vezes, o procmail é capaz de liberar o bloqueio (ou o bloqueio desaparece) antes que ocorra o tempo limite do comando postfix (que agora está definido para uma hora).  Caso contrário, a entrega de mensagens falhará com:

relay=local, delay=2001, delays=0.78/0.05/0/2000, dsn=5.3.0,
status=bounced (Command time limit exceeded: "procmail -t -f-")

O arquivo bkp é muito grande (mais de 10 gigabytes), mas o problema é intermitente com várias semanas entre os casos do problema e não ocorre para outros usuários que têm o mesmo procmailrc e gigabyte arquivos de tamanho (embora nenhum seja tão grande quanto isso).

O usuário prefere não usar pastas de estilo MailDir e deseja manter isso como um arquivo mbox. Existe uma maneira que eu possa reescrever o script para permitir entrega de correio para a caixa de correio do usuário enquanto o procmail espera no bloqueio para bkp? Eu tentei:

:0c      #copy all mail to "Saved"
{
 :0:
 bkp
}

EDIT: Eu alterei as receitas acima de: 0 w: para: 0: já que w espera em um programa e nenhum está sendo executado nesta declaração.

Que permitirá dois emails antes que o procmail pare de aceitar emails novamente se eu bloquear manualmente o bkp durante os testes. Se eu soltar a fechadura antes Depois que o postfix expira, o e-mail será entregue. eu também gostaria de determinar a causa raiz do problema de bloqueio, mas não consegui para acioná-lo ainda, exceto por bloquear o arquivo sozinho. Eu adicionei LOCKTIMEOUT = 10 a tente forçar a condição sem sucesso na entrega de correspondência normal.

Aqui está a informação da versão do procmail:

procmail v3.22 2001/09/10     Copyright (c) 1990-2001, Stephen R. van den Berg     Copyright (c) 1997-2001, Philip A. Guenther

Envie perguntas / respostas para a lista de discussão relacionada ao procmail, enviando para:         

E, claro, solicitações de inscrição e informações para esta lista:         

Estratégias de bloqueio: dotlocking, fcntl () Rcfile padrão: $ HOME / .procmailrc         Pode ser gravável pelo seu grupo primário

    
por John H 01.12.2013 / 04:02

2 respostas

0

Veja o que eu fiz:

  • Para testar meu problema, criei uma imagem do vmware do debian squeeze e limitei o IOPS do disco para 40 e a memória para 256MB na máquina.

  • Eu usei postfix, dovecot e procmail da mesma forma que os configurei na minha máquina de produção.

  • Eu criei uma conta de usuário e criei arquivos grandes de vários gigabytes para o procmail escrever.
  • Instalei o nmon e o sysstat para observar os valores de E / S e de tps do uso do disco para a unidade enquanto o Outlook e uma operação de cópia local estavam em execução.

O que eu encontrei:

  • Foi relativamente fácil obter o Tempo Limite de Comando com o postfix, mas ainda não consegui gerar o erro de bloqueio experimentado pelo usuário (exceto usando fcntl para bloquear o arquivo).
  • Eu escolhi um arquivo de 4 GB para ser meu arquivo de salvamento, em seguida, executei "Reparar pasta" na pasta IMAP no Outlook 2011 ao copiar um arquivo de 1,3 GB no servidor. Isso causou E / S suficiente no disco do servidor para gerar tempos limite no procmail.

Não é completamente conclusivo, mas parece que uma alta carga de disco junto com um cliente do Outlook acessando o arquivo de mensagens que o procmail está tentando bloquear pode atrasar a entrega de mensagens o tempo suficiente para atingir o tempo limite definido no postfix.

O que eu não tentei:

  • Eu não re-compilei a fonte e desativei o bloqueio conforme a FAQ 16 na fonte do procmail. No meu caso, o erro é bastante raro e há a alternativa de girar o arquivo salvo regularmente para mantê-lo pequeno.
por 12.02.2015 / 20:10
0

Já pensou em usar caixas de correio / arquivos de backup diários / semanais menores?

Você pode usar trabalhos agendados para movê-los para o backup principal.

man procmailex fornece exemplos de como obter nomes de destino com base na date output.
man procmail fornece exemplo de como usar o formatoil para o arquivo de caixa de correio postproces com bloqueio .

    
por 02.12.2013 / 07:56