Logrotate: Файл журнала, не поворачиваемый

[

]Я написал небольшой питоновый скрипт, который разобрался с этой проблемой. Логика смотрит на каждую строку в файле []package.accept_keywords[] и действует только на те строки, которые начинаются с []=[] или []<=[]. Эти строки имеют максимальную ограниченную версию, поэтому мы можем проверить, нужны ли они больше. Строки без квалификатора или []>=[] оставляются как есть, так как мы не можем узнать, устарели ли они.[

] [

]Строки, о которых мы беспокоимся, затем разбираются и проверяется установленная версия пакета. Если установленная версия более новая, чем та, что написана по ключевому слову, или вообще не установлена, то ключевое слово считается устаревшим. Если установленная версия пакета та же самая, что и версия по ключевому слову, то установленная версия проверяется на то, что она все еще содержит ключевое слово. Если он стабилизирован, то строка устарела, в противном случае она сохраняется.[

] [
#!/bin/env python

import re
import portage

vartree = portage.db[portage.root]['vartree']

with open('/etc/portage/package.accept_keywords') as f:
    for x in f:
        # eat newline
        x = x.rstrip()
        # we only want lines with a bounded max version
        if re.match('^(=|<=)',x):
            # get the package cpv atom -- strip the =|<= and the trailing keyword(s)
            cpv_masked = re.sub('[<=]','',x.split(' ',1)[0])
            cat, pkg, ver, rev = portage.catpkgsplit(cpv_masked)
            # get cpv for all installed versions of the package
            cpv_installed = vartree.dep_match(cat+'/'+pkg)
            for cpv in cpv_installed:
                cmp = portage.pkgcmp(portage.pkgsplit(cpv), portage.pkgsplit(cpv_masked))
                # if the installed version is not newer than the masked version
                if (cmp <= 0):
                    # check if this version is still keyworded
                    cpv_keywords = vartree.dbapi.aux_get(cpv, ['KEYWORDS'])
                    # keep keyword if the package has no keywords (**)
                    if not cpv_keywords[0]:
                        print(x)
                        break
                    # check if the installed package is still keyworded
                    for cpv_keyword in cpv_keywords[0].split(' '):
                        if cpv_masked_keyword == cpv_keyword:
                            # it is, keep the atom and move on to the next one
                            print(x)
                            break                    
        else:
            # keep atoms that have an unbounded max version
            print(x)
] [

]Это выведет на печать новый файл ключевых слов в стандартном виде. []Примечание[]: не перенаправляйте вывод обратно в []/etc/portage/package.accept_keywords[], иначе вы засорите файл и потеряете все. [

] [

]Это значительно облегчит очистку файла с ключевыми словами, а для других ваших проблем, сортировка файла и его последующее изучение на несколько строк для одного и того же пакета поможет решить большую часть оставшейся части. [

]
1
27.01.2015, 06:31
2 ответа

Аргументом для logrotate должен быть конфигурационный файл, следовательно, ошибки, связанные с тем, что test.log является некорректным конфигурационным файлом. Попробуйте:

logrotate -f /etc/logrotate.conf

Если это не сработает, то можно попробовать включить отладочный лог, используя опции -d. Наконец, я столкнулся со случаями, когда единственный способ коаксиально вращать лог-файл - это изменить его файл состояния /var/lib/logrotate.status. Файл имеет формат:

logrotate state -- version 2
"/path/to/a.log" 2015-1-26-11:0:0
"/path/to/another.log" 2015-1-26-11:0:0

где второй столбец - это дата последнего изменения файла. Вы можете сдвинуть дату в прошлое, чтобы убедить logrotate запуститься; но в этом нет необходимости, так как вы используете поворот на основе размера.

1
27.01.2020, 23:37

Ошибка дает намек на проблему. Как вы создали этот лог-файл? В файле могут быть плохие данные или возврат каретки.

Я бы порекомендовал просмотреть этот ответ на предмет подсказок о том, как проверить ваш файл. Или, по крайней мере, воссоздать файл самостоятельно. Если вы скопировали и вставили содержимое в этот файл, возможно, что-то прокралось в него.

1
27.01.2020, 23:37

Теги

Похожие вопросы