LINUX.ORG.RU
ФорумAdmin

exim logfile size ?


0

0

Есть exim 4.69 на чпуксе.
Упорно не хочет писать логфайлы размером больше 2G.
Exim слетает и пишет в panic.log «failed to write to main log: length=101 result=-1 errno=27 (File too large)»
(В чпуксе фс созданы и смонтированы с опцией longfiles, так что большие файлы писаться должны - проверял).
Значит, ограничение в exim'е.
Кто знает - можно ли как-нибудь победить (кроме ротации)?


Ответ на: комментарий от anton_jugatsu

В смысле писать в него, вместо отдельного лога экзима?
Неудобно это. Он и так длиннющий. Ротацию я к нему не прикручивал (за отсутствием надобности), так он ротируется только при перезагрузке системы, т.е. почти никогда.

lralex
() автор топика

>Значит, ограничение в exim'е.

Вот и запустите exim через strace и посмотрите с какими флагами он открвает лог-файл, есть там флаг O_LARGEFILE?

mky ★★★★★
()
Ответ на: комментарий от mky

Что-то я не врубаюсь, как юзать strace в чпуксе - синтаксис совсем не
такой, как в линуксе

SYNOPSIS
strace [ mod sub pri ] ...

DESCRIPTION
strace gets STREAMS event trace messages from STREAMS drivers
and modules via the STREAMS log driver (strlog(7)), and writes these
messages to standard output. By default, strace without arguments
writes all STREAMS trace messages from all drivers and modules.
strace with command-line arguments limits the trace messages received.

The arguments, which must be specified in groups of three, are:
mod Specifies the STREAMS module identification number from the streamtab entry.
sub Specifies a subidentification number (often corresponding to a minor device).
pri Specifies a tracing priority level. strace gets messages of a level equal to or less than the value specified by pri.
Only positive integer values are allowed.

Но даже, если он покажет, что флага O_LARGEFILE там нет, то что
делать дальше? Экзим то можно заставить писать лог длиннее 2 гигов?

lralex
() автор топика
Ответ на: комментарий от mky

Заюзал tusc.
Действительно
open(«/var/log/exim/main.log», O_WRONLY|O_APPEND, 0640)

про O_LARGEFILE не слышно.

Ну и что делать дальше?

lralex
() автор топика
Ответ на: комментарий от lralex

Патчить exim и перекомпилировать. То есть без перекомпиляции никак, разве что переходить на 64-бит, там вроде нет отдельного флага для файлов > 2 Гбайт.

А так, либо искать место, где делается открытие лог-файла /*возможно заменить fopen() на open() + fdopen()*/, либо указать при компиляции "-D_FILE_OFFSET_BITS=64". Первый вариат, ИМХО, предпочтительнее, так как во втором случае меняется разрядность типа off_t и это может где то «всплыть», если его считаю равным int.

mky ★★★★★
()
Ответ на: комментарий от mky

Попробовал перекомпилить с опциями
-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
Эффекта никакого.
Кроме всего, компилю то не gcc-ми (ими вообще exim не собирается), а
коммерческим HP-шным компилятором (ansic). М.б., он на эти опции чихает.

lralex
() автор топика
Ответ на: комментарий от lralex

Это не опции компилятора, это флаги препроцессора. И при соответсвующих (гнутых) хидерах получается добавление флага O_LARGEFILE в сисколы open() и create().

Я невнимательно прочитал ваш первый пост, подумал что речь про Линукс. HP-UX я не знаю, не знаю, какие хидеры библиотек. Наверно, проще пропатчить исходник и добавить в open() флаг O_LARGEFILE.

mky ★★★★★
()
Ответ на: комментарий от mky

Хрен!
Не помогает. Пропатчил текст, но опция игнорируется, как будто
ее нет.
Черт с ней, буду ротировать лог чаще.

lralex
() автор топика
Ответ на: комментарий от lralex

Победил таки я его!
Просто внимательней надо быть!
Он, зараза, когда делаешь «make install» почему то симлинк
по имени «exim» не переписывал.
Случайно заметил. Я его как умная Маша рестартую, а он пускается
все один и тот же.
В общем, помогло то, что и пробовал изначально - флаги
-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE.
После этого стал писать
open(«/var/log/exim/main.log», O_WRONLY|O_APPEND|0x800, 0640)
..........................................................................................^^^^^^
и все заработало.

lralex
() автор топика
Ответ на: комментарий от lralex

В смысле писать в него, вместо отдельного лога экзима?

Неудобно это. Он и так длиннющий. Ротацию я к нему не прикручивал (за >отсутствием надобности),


Я всё таки пишу в syslog. Всё в отдельном файле /var/log/maillog, /var/log/mail.log.

tux2002
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.