На всякий случай, если у кого-то все еще есть проблема с Centos 7 на Raspberry Pi в связи с этой ошибкой LSB.
В конце концов я обнаружил, что запускаемый скрипт /etc/rc.d/init.d/network
сразу же выдает ошибку с status = 6
, если конкретный файл не существует, а именно / etc / sysconfig / network
.
Я понятия не имею, зачем нужен этот файл, поскольку в другой системе, над которой я работаю, файл существует, но пуст. Но его не существовало из коробки с ОС Centos 7, которую я получил для своего Raspberry. После выполнения всех остальных шагов (удаление Network Manager, установка статического IP-адреса в файле ifcfg, завершение процесса dhc для Network Manager и т. Д.), Если вы все еще получаете эту ошибку, просто попробуйте:
touch /etc/sysconfig/network
Файл может быть пустым. Просто должно существовать.
Затем перезапустите сетевую службу:
systemctl restart network
И вуаля. Я понимаю, что это очень небольшое исправление, но я прошел через все головные боли и попытки, описанные выше, прежде чем нашел это, и я был в порядке.
Вам понадобится несколько проходов. Вот решение, которое использует sed
, sort
, head
и cut
, чтобы вывести пятерку первых в нужном вам порядке.
sed -e 's/^\([A-Za-z]\{3\} \{1,2\}[0-9]\{1,2\} \{1,2\}\([0-9]\{2\}:\)\{2\}[0-9]\{2\}\).* \(delay=\([0-9]\{2\}\):\([0-9]\{2\}\):\([0-9]\{2\}\)\).*/\4\5\6 \1 \3/' | sort -nr | head -n5 | cut -d\ -f2-
С предоставленными вами входными данными это выдает:
Mar 19 06:10:26 delay=00:20:15
Mar 19 06:10:16 delay=00:00:15
Mar 19 14:41:26 delay=00:00:03
(Предполагается, что входные данные имеют формат журнала, который вы указали, и что это только переданные строки с нужными вам данными. Может потребоваться дополнительная команда grep в начале.)
Давайте разберемся.
sed
означает Stream EDitor. Обычно он используется для применения регулярных выражений к текстовым потокам.
's/^\([A-Za-z]\{3\} \{1,2\}[0-9]\{1,2\} \{1,2\}\([0-9]\{2\}:\)\{2\}[0-9]\{2\}\).* \(delay=\([0-9]\{2\}\):\([0-9]\{2\}\):\([0-9]\{2\}\)\).*/\4\5\6 \1 \3/'
Это довольно сложно, но, скорее, должно быть, чтобы избежать катастрофического возврата .
Мы используем замены Regex. Чтобы увидеть, что он делает в деталях, попробуйте Regex101 . А пока знайте, что он принимает ввод:
Mar 19 06:10:16 ip-172-2-0-53 sendmail[28131]: v2JDA1k4028131: to=root, ctladdr=root (0/0), delay=00:00:15, xdelay=00:00:00, mailer=relay, pri=30580, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (v2JDAG5W028134 Message accepted for delivery)
Mar 19 14:41:26 ip-172-2-0-53 sendmail[29483]: v2JLfNFN029481: to=<jdoe@ifaded.com>,<ksmith@ifaded.com>, delay=00:00:03, xdelay=00:00:03, mailer=esmtp, pri=151738, relay=ifaded-com.mail.p...ction.outlook.com. [xx.xxx.x.x], dsn=2.0.0, stat=Sent (<4253fa32d79a11ce3b5f5147278dfae9@heg.jkadionbub.com> [InternalId=31288836753166, Hostname=FOOBAR1.namprd07.prod.outlook.com] 8924 bytes in 0.309, 28.142 KB/sec Queued mail for delivery)
Mar 19 06:10:26 ip-172-2-0-53 sendmail[28131]: v2JDA1k4028131: to=root, ctladdr=root (0/0), delay=00:20:15, xdelay=00:00:00, mailer=relay, pri=30580, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (v2JDAG5W028134 Message accepted for delivery)
и преобразует его в
000015 Mar 19 06:10:16 delay=00:00:15
000003 Mar 19 14:41:26 delay=00:00:03
002015 Mar 19 06:10:26 delay=00:20:15
^\([A-Za-z]\{3\} \{1,2\}[0-9]\{1,2\} \{1,2\}\([0-9]\{2\}:\)\{2\}[0-9]\{2\}\).* \(delay=\([0-9]\{2\}\):\([0-9]\{2\}\):\([0-9]\{2\}\)\).*
Сначала мы явно сопоставляем компоненты даты; они нам понадобятся для вывода позже. Затем мы по отдельности находим и сопоставляем задержку и ее временные компоненты; задержка, которую вы хотели в своем выводе. Компоненты времени, которые нам понадобятся позже для сортировки.
\4\5\6 \1 \3
На стороне замены регулярного выражения мы берем взятые нами компоненты синхронизации и объединяем их без разделителя «:», который у них был изначально. Это важно, поскольку мы собираемся использовать их для sort
позже. После компонентов синхронизации мы добавляем строку даты и всю исходную строку задержки; они нам понадобятся после сортировки.
sort -nr
Поскольку наш ввод теперь начинается с десятичного числа вместо точной временной отметки, мы можем использовать числовой режим sort
, указанный с помощью флага -n
.
По умолчанию sort
сортирует в порядке возрастания, при этом наибольшие значения помещаются в конец. Поскольку это будет означать обработку всех вывода sort
для нахождения наибольших N значений, мы используем флаг sort -r
, чтобы изменить порядок вывода; теперь наибольшие значения будут выводиться первыми, и мы можем head
вместо `tail.
Наш вывод на этом этапе выглядит следующим образом:
002015 Mar 19 06:10:26 delay=00:20:15
000015 Mar 19 06:10:16 delay=00:00:15
000003 Mar 19 14:41:26 delay=00:00:03
head -n5
На этом этапе наш ввод будет иметь сначала самые большие значения, и мы уже знаем, что нам нужны самые большие 5 значений. Поэтому мы используем параметр head
-n
, чтобы сообщить head
, сколько значений нам нужно.
Поскольку в этом примере у нас на самом деле не более 5 значений, мы все равно получаем весь вывод, который нам подали.
002015 Mar 19 06:10:26 delay=00:20:15
000015 Mar 19 06:10:16 delay=00:00:15
000003 Mar 19 14:41:26 delay=00:00:03
cut -d\ -f2-
Поскольку он нам больше не нужен, мы нужно удалить числовой ключ сортировки, который мы вставили с помощью sed
на первом шаге. Для этого мы обращаемся к cut
, который позволяет нам выбирать, какие поля нам нужны из каждой предоставленной строки.
Мы используем параметр cut -d
, чтобы сообщить ему, что такое наш разделитель полей, наш разделитель. Поскольку разделителем полей является пробел, нам нужно экранировать его с помощью \
, давая нам -d \
.
С точки зрения cut
, это разбивает строку 002015 19 марта 06:10:26 delay = 00: 20: 15
на 002015
мар
19
06:10:26
delay = 00: 20: 15
.
Чтобы указать, какие поля нам нужны, мы используем -f
. Поскольку нам нужны все поля, кроме первого, мы используем -f2-
, что дает нам желаемый результат:
Mar 19 06:10:26 delay=00:20:15
Mar 19 06:10:16 delay=00:00:15
Mar 19 14:41:26 delay=00:00:03
perl -lane '
print join $", /\sdelay=\K(\S+)(?=,)/, splice(@F, 0, 3), /\s\K(delay=\S+)(?=,)/;
' | sort -t: -k 1,1nr -k 2,2nr -k 3,3nr | cut -d\ -f2- | head -n 5