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).