- Вопрос или проблема
- Ответ или решение
- Установка лимита размера для текущего syslog: Подробное руководство
- 1. Понимание rsyslog и его конфигурации
- 2. Настройка конфигурации
- 3. Проблемы с запуском скрипта
- 4. Проверка прав доступа и привилегий
- 5. Особенно рекомендованные команды
- 6. Альтернативные методы управления журналами
- Заключение
Вопрос или проблема
Основываясь на других темах, единственный способ установить ограничение по размеру для текущего syslog
(/var/log/syslog
) кажется связанным с rsyslog
, что немного сложно. Я заменил следующую строку в /etc/rsyslog.d/50-default.conf
:
.*;auth,authpriv.none -/var/log/syslog
на эти 2 строки:
$outchannel mysyslog,/var/log/syslog,1073741824,/home/username/.me/log_rotation_script
*.*;auth,authpriv.none :omfile:$mysyslog
Моя проблема заключается в том, что независимо от того, что я помещаю в log_rotation_script
, я получаю одну и ту же ошибку, когда очищаю syslog
и перезапускаю rsyslog.service
. После того как syslog
достигает 1 ГБ, rsyslog
всегда выдает одну и ту же ошибку ниже:
Mar 01 22:17:27 # rsyslogd[341844]: программа '/home/username/.me/log_rotation_script' (pid 341977) завершилась с кодом 1 [v8.2001.0]
Mar 01 22:17:27 # rsyslogd[341844]: команда ограничения размера файла для файла '/var/log/syslog' не разрешила ситуацию [v8.2001.0]
Возвращается status 1
, даже если я помещаю только команду echo
внутрь log_rotation_script
!
Обратите внимание, что с самим скриптом или путем все в порядке, так как выполнение содержимого файла по указанному пути работает без каких-либо проблем, если я выполняю, например, с помощью команды ниже:
bash /home/username/.me/log_rotation_script
Что я здесь упускаю? Пожалуйста, помогите!
Rsyslog запускается с правами root, но затем сбрасывает права и выполняется как пользователь syslog. Проверьте директивы конфигурации $PrivDropToUser
и $PrivDropToGroup
в /etc/rsyslog.conf
:
$PrivDropToUser syslog
$PrivDropToGroup syslog
Поскольку у пользователя syslog не так много прав, он не может выполнить logrotate
, потому что logrotate
нуждается в доступе к своему файлу состояния, который не разрешает доступ для пользователя syslog. Также в моем случае мне нужно было перезапустить rsyslog после ротации логов, но снова, у пользователя syslog не было прав на это.
Я пробовал другие способы обойти эти ограничения (sudoers, дополнительные права), но каждый раз, когда я решал одну проблему, возникала другая, поэтому я считал функцию logrotate
и $outchannel
бесполезной.
Кажется, что она возвращает ошибку для любой команды, которую вы помещаете в $outchannel
, кроме rm
и mv
(эти две команды работают). Я пытался truncate
файл, но это не сработало с программа '/usr/bin/truncate' (pid 1234) завершилась с кодом 1 [v8.2001.0]
, однако rm
работает, и вам даже не нужно перезагружать rsyslog:
$outchannel syslog_file,/var/log/syslog,100000,/usr/bin/rm /var/log/syslog
*.*;auth,authpriv.none :omfile:$syslog_file
Можно усечь логи, указав размер для команды truncate, т.е. $outchannel mysyslog,/var/log/syslog,1048576,/usr/bin/truncate -s 1M /var/log/syslog
. В противном случае rm
работает отлично, как упомянуто в решении Олександыра.
Ответ или решение
Установка лимита размера для текущего syslog: Подробное руководство
Настройка ограничений размера для журнала syslog (/var/log/syslog) в системе Linux — задача, которая может вызвать некоторые затруднения. В этой статье мы рассмотрим, как установить размер лимита для syslog с использованием rsyslog и решим связанные проблемы, которые могут возникнуть в процессе.
1. Понимание rsyslog и его конфигурации
Rsyslog — это расширенная версия syslog, предоставляющая большую гибкость в управлении журналами. Чтобы установить лимит на размер файла syslog, вам нужно отредактировать конфигурацию rsyslog, которая обычно находится в /etc/rsyslog.d/50-default.conf
.
2. Настройка конфигурации
Сначала замените оригинальную строку, отвечающую за вывод в syslog, на следующие две строки:
$outchannel mysyslog,/var/log/syslog,1073741824,/home/username/.me/log_rotation_script
*.*;auth,authpriv.none :omfile:$mysyslog
В этом примере 1073741824
указывает лимит в 1 ГБ, а log_rotation_script
— это скрипт, который будет выполнен при достижении лимита.
3. Проблемы с запуском скрипта
После настройки конфигурации и перезапуска rsyslog у вас могут возникнуть ошибки, такие как:
program '/home/username/.me/log_rotation_script' (pid xxx) exited with status 1
file size limit cmd for file '/var/log/syslog' did no resolve situation
Эти ошибки указывают на то, что скрипт не может выполниться как ожидается. Причина, скорее всего, заключается в том, что rsyslog работает с понижением привилегий и перешел к пользователю syslog
, который может не иметь необходимых прав для выполнения определенных команд.
4. Проверка прав доступа и привилегий
Вы можете проверить, какие пользователи и группы настроены в вашем файле конфигурации rsyslog:
$PrivDropToUser syslog
$PrivDropToGroup syslog
Пользователь syslog
имеет ограниченные права, и если ваш скрипт пытается выполнить команды, требующие более высоких прав (например, logrotate
), это приведет к ошибкам.
5. Особенно рекомендованные команды
Некоторые команды могут выполняться успешно, например, rm
и mv
. Однако команды, такие как truncate
, могут вызывать проблемы. В случае, если вам нужно обрезать файл журнала, вы можете сделать это следующим образом:
$outchannel mysyslog,/var/log/syslog,1048576,/usr/bin/truncate -s 1M /var/log/syslog
*.*;auth,authpriv.none :omfile:$mysyslog
Это обеспечит обрезку файла журнала до 1 МБ, если он превысит этот размер.
6. Альтернативные методы управления журналами
Во избежание проблем, связанных с правами доступа, можно рассмотреть использование стандартного утилита logrotate
, которая лучше подходит для управления размером файлов журналов. Настройте logrotate
для работы с /var/log/syslog
, чтобы упростить процесс ротации и управления размерами файлов.
Заключение
Установка лимита на размер файла syslog с помощью rsyslog может потребовать тщательной настройки и понимания привилегий пользователей. Следуйте приведенным рекомендациям, чтобы избежать распространенных ошибок и обеспечить эффективное управление вашими журналами. Не забывайте тестировать настройки в безопасной среде, чтобы избежать потери критической информации.
Если возникли дополнительные вопросы или проблемы, не стесняйтесь обращаться за помощью к сообществу или профессиональным администраторам систем.