aumenta o tamanho do arquivo para arquivos de log de scripts iniciados a partir do postfix

3

Estou usando o Postfix para executar um script sempre que uma mensagem é enviada para um endereço específico. O script é um script Perl e grava um log em um arquivo usando Log4perl . O arquivo de log está sendo rotacionado diariamente pelo Log4perl.

Está funcionando bem, exceto por um caso de canto pequeno. O script não pode gravar no arquivo de log quando o tamanho do arquivo do log estiver acima de 50 MB.

Depois de fazer algumas pesquisas no Postfix, parece que isso pode ser um conjunto de limitações do Postfix. Aqui está parte da saída de postconf que pode ser relevante.

$ postconf | grep size
berkeley_db_create_buffer_size = 16777216
berkeley_db_read_buffer_size = 131072
body_checks_size_limit = 51200
bounce_size_limit = 50000
header_size_limit = 102400
mailbox_size_limit = 51200000
message_size_limit = 10240000
tcp_windowsize = 0

$ postconf | grep virtual_mailbox_limit
virtual_mailbox_limit = 51200000

Há alguma opção que possa ser alterada para remover o limite de 50 MB para o tamanho do arquivo de log criado a partir do script?

Aqui estão as configurações do Log4perl para completar.

$ cat /some/path/to/my/log4perlsettings.cfg
log4perl.logger.mylog = DEBUG,LOGGER
log4perl.appender.LOGGER = Log::Dispatch::FileRotate
log4perl.appender.LOGGER.TZ=PST
log4perl.appender.LOGGER.DatePattern=yyyy-MM-dd
log4perl.appender.LOGGER.filename = /some/path/to/my/logs/logfile.log
log4perl.appender.LOGGER.mode = append
log4perl.appender.LOGGER.max = 30
log4perl.appender.LOGGER.layout = PatternLayout
log4perl.appender.LOGGER.layout.ConversionPattern = [%d] %P %p %r %H %F %L %C - %m%n

Estas provavelmente não são relevantes, mas aqui estão as configurações do alias do Postfix:

$ grep -r myscript /etc/postfix/
/etc/postfix/virtual:[email protected]        myscript

$ grep -r myscript /etc/aliases
myscript:       "|/some/path/to/my/script.pl"

Editar :

Aqui está a saída de /var/log/maillog . Isso se repete muitas e muitas vezes.

Dec 13 10:59:22 mymachine postfix/cleanup[22052]: EB5EA80196: message-id=<[email protected]>
Dec 13 10:59:22 mymachine postfix/bounce[22431]: 7C11080190: sender non-delivery notification: EB5EA80196
Dec 13 10:59:22 mymachine postfix/qmgr[2109]: EB5EA80196: from=<>, size=3456, nrcpt=1 (queue active)
Dec 13 10:59:22 mymachine postfix/qmgr[2109]: 7C11080190: removed
Dec 13 10:59:23 mymachine postfix/smtp[22342]: EB5EA80196: to=<[email protected]>, relay=mail.example.net[192.168.1.11]:25, delay=0.04, delays=0.01/0/0/0.03, dsn=2.0.0, status=sent (250 ok 1418435963 qp 19340)
Dec 13 10:59:23 mymachine postfix/qmgr[2109]: EB5EA80196: removed
Dec 13 10:59:39 mymachine postfix/smtpd[21267]: connect from unknown[192.168.2.12]
Dec 13 10:59:39 mymachine postfix/smtpd[21267]: CA0AB80190: client=unknown[192.168.2.12]
Dec 13 10:59:39 mymachine postfix/cleanup[21893]: CA0AB80190: message-id=<[email protected]>
Dec 13 10:59:39 mymachine postfix/smtpd[21267]: disconnect from unknown[192.168.2.12]
Dec 13 10:59:39 mymachine postfix/qmgr[2109]: CA0AB80190: from=<[email protected]>, size=712, nrcpt=1 (queue active)
Dec 13 10:59:40 mymachine postfix/local[21269]: CA0AB80190: to=<[email protected]>, relay=local, delay=0.43, delays=0.02/0/0/0.4, dsn=5.3.0, status=bounced (Command died with status 27: "/some/path/to/my/script.pl". Command output: Cannot write to '/some/path/to/my/logs/logfile.log': File too large at /usr/local/share/perl5/Log/Dispatch/File.pm line 141. )
Dec 13 10:59:40 mymachine postfix/cleanup[22052]: 3B8FD80196: message-id=<[email protected]>
Dec 13 10:59:40 mymachine postfix/bounce[22431]: CA0AB80190: sender non-delivery notification: 3B8FD80196
Dec 13 10:59:40 mymachine postfix/qmgr[2109]: 3B8FD80196: from=<>, size=2897, nrcpt=1 (queue active)
Dec 13 10:59:40 mymachine postfix/qmgr[2109]: CA0AB80190: removed
Dec 13 10:59:40 mymachine postfix/smtp[21679]: 3B8FD80196: to=<[email protected]>, relay=mail.example.net[192.168.1.11]:25, delay=0.04, delays=0/0/0/0.03, dsn=2.0.0, status=sent (250 ok 1418435980 qp 19356)
Dec 13 10:59:40 mymachine postfix/qmgr[2109]: 3B8FD80196: removed

A linha importante é provavelmente esta:

Dec 13 10:59:40 mymachine postfix/local[21269]: CA0AB80190: to=<[email protected]>, relay=local, delay=0.43, delays=0.02/0/0/0.4, dsn=5.3.0, status=bounced (Command died with status 27: "/some/path/to/my/script.pl". Command output: Cannot write to '/some/path/to/my/logs/logfile.log': File too large at /usr/local/share/perl5/Log/Dispatch/File.pm line 141. )

Este erro começa a ocorrer exatamente quando o tamanho do arquivo /some/path/to/my/logs/logfile.log é 50MB (51200000 bytes).

Edit2 :

O script perl é executado corretamente ao ser chamado a partir da linha de comando (ou seja, sem ser chamado pelo Postfix).

    
por illabout 15.12.2014 / 04:39

1 resposta

4

Esta é realmente uma limitação herdada do postfix. A razão é que, quando você está escrevendo para um script direcionando as entregas para um canal, isso conta como uma caixa de correio, como se você tivesse escrito diretamente em um arquivo. Portanto, quaisquer limites definidos no agente de entrega postfix serão herdados pelo script.

Posso pensar em três maneiras de contornar isso:

  1. Você altera as limitações na sua configuração do postfix; você já identificou a fonte da limitação.
  2. Você executa o logrotate com mais frequência, para que o arquivo não fique acima de 50 MB.
  3. Você altera seu script para usar as funções de logrotate disponíveis em Log :: Dispatch: : FileRotate , para que o arquivo seja automaticamente girado quando exceder 50 MB.
por 15.12.2014 / 07:44

Tags