init, syslog и stdout / stderr

Я пытаюсь построить встроенную систему с linux. (Это очень мало ресурсов и не намного больше, чем busybox.) Я хотел бы убедиться, что все будет в syslog. Я использую новейшую версию busybox (v.1.21.1) со встроенным init и syslogd.

Однако есть несколько проблем. Сначала inittab:

.... null::sysinit:/bin/sh /etc/rc null::sysinit:/bin/touch /var/log/messages null::respawn:/sbin/syslogd -n -S -s 12 -b 8 null::respawn:/sbin/klogd -n .... 

Сценарий rc запускается до syslog, что означает, что вся полезная информация из rc теряется. (Я не уверен, что команда touch для btw.) Я могу запустить syslog до rc (null :: sysinit: / sbin / syslogd …), но это устранит очень важный «респаун».

Также, когда запускаются сторонние демоны, это может выглядеть так:

 ... null::respawn:/bin/modbus ... 

Если демон не поддерживает syslog или что-то выскальзывает (например, print to stderr), оно теряется. Я не могу перенаправить вывод в syslog. Например.

 ... console::respawn:/bin/modbus|logger 2>1 ... 

Я пробовал несколько разных комбинаций. Кажется, что ничего не работает. Ofc, я мог бы отредактировать всех демонов и заставить их поддерживать syslog. (Но что, если что-то выскальзывает?) Это можно решить, если бы я мог написать что-то вроде этого:

 log::respawn:/bin/modbus 

И на самом деле есть / dev / log. Но это сокет, нормальные переадресации не будут работать. … поэтому я мог бы заставить его работать через специальный модуль ядра. Например. Я мог бы создать модуль, который создает / dev / syslog_link, который записывает все в printk. Проблема в том, что syslog будет отмечать все сообщения от этого как «ядро». Очень неправильно.

Итак, теперь я думаю, что могу создать модуль ядра, который записывает в / dev / log: https://stackoverflow.com/questions/1184274/how-to-read-write-files-within-a-linux- модуль ядра https://www.cs.drexel.edu/~jjohnson/2012-13/fall/cs543/project/reading/kernel_fileio.pdf

Я не знаю, возможно ли это, хотя и писать файлы из пространства ядра вредит моему хрупкому состоянию правильного и неправильного.

Есть предположения?

2 Solutions collect form web for “init, syslog и stdout / stderr”

Сценарий rc запускается до syslog

Для этого может быть веская причина, например, потому что именно там файловая система, содержащая /var/log повторно монтируется rw. Если нет, вы можете сначала запустить syslog.

Я пробовал несколько разных комбинаций. Кажется, что ничего не работает.

Я не много играл с inittab более чем через несколько лет. Вы пытались положить, например, /bin/modbus|logger 2>1 в короткий скрипт, а затем использовать это вместо respawn ?

Ofc, я мог бы отредактировать всех демонов и заставить их поддерживать syslog.

Если возможно, вы, вероятно, должны это сделать. Или вы могли бы написать их напрямую в файл.

есть / dev / log. Но это сокет, нормальные переадресации не будут работать. … поэтому я мог бы заставить его работать через специальный модуль ядра.

Это похоже на перебор. Было бы проще использовать демон пользователя для пользователей и начать сначала; он может читать от fifo и писать на что угодно. Конечно, это может быть немного избыточным, поскольку уже существует syslog: / Трюк с читателем fifo заключается в повторном открытии канала, когда read() возвращает 0. Но опять же, я попытаюсь сначала запустить syslog. Сохранение стандартного материала кажется более простым.

Вы можете рассмотреть / dev / kmsg, для ранних сообщений о запуске. Они будут храниться в круговом буфере в ядре до тех пор, пока пользовательское пространство (почти всех дистрибутивов) не выгрузит его в syslog после того, как файловая система станет доступной для записи, а проверки диска будут выполнены. Это будет работать до тех пор, пока ваш буфер ядра будет больше, чем размер сообщений, которые происходят до запуска регистратора. Размер буфера журнала ядра настраивается во время компиляции. Вы должны перенаправить вещи в / dev / kmsg с типичными сценариями оболочки.

Что касается перенаправления stdout произвольных программ на syslog, там есть утилиты, которые читают STDIN и перенаправляют на syslog, а затем вы просто передаете выходные данные демона утилите. Вот что я нашел полезным: http://b0llix.net/perp/site.cgi?page=sissylog.8

Все, что сказал, есть много людей, которые делают много умных вещей с протоколированием. Поскольку вам кажется, что вы заинтересованы в этом вопросе, вам может быть интересно ознакомиться с разделом «Проект syslog имеет недостатки в начале» от http://www.skarnet.org/software/s6/s6-log.html

Надеюсь, это поможет.

  • Как определить, есть ли у syslog.conf опечатка
  • MacOS: история USB (имя и временная метка подключенных устройств)
  • kernel: mdadm: отправка ioctl 1261 в раздел!
  • centos 6.8: Удалено / var / log / messages ... оно не вернулось?
  • Как использовать последовательный порт в качестве источника для Syslog?
  • Запись активности apt / dpkg в syslog
  • Удаленная командная строка syslog Клиент
  • Служба Systemd Python не отправляет весь вывод в syslog
  • Конфигурация syslog - повторное оповещение?
  • Ошибка не может открыть tty-output Linux
  • Перенаправление сообщений об ошибках syslogd в журнал ошибок или в нулевой файл?
  • Interesting Posts

    Как указать дату и время в имени файла?

    Есть ли способ проверить пользовательский SSH-ключ, чтобы увидеть, является ли кодовая фраза пустой

    Замена 3 или более цифр эквивалентным числом *

    bash: zpool: команда не найдена

    Как получить последние пять рабочих дней в сценарии оболочки Unix, используя цикл `for`?

    Почему мой ровно 100 разделов MiB при размере блока 1 KiB имеют соответствующие доступные блоки / пробелы?

    Должен ли ждать следующего выпуска монетного двора для плазмы KDE 5?

    У вас нет разрешения на запись в разделе

    Bash ждет рабочих мест и ограничивает количество заданий

    Как очистить загрузчики и записи UEFI от других установок?

    Может ли seccomp использоваться для обеспечения детерминированного исполнения?

    Не удается получить экран входа в GUI на Debian Jessie

    Нет звука в Kali Linux

    Fedora «disk full», df, du (gui) подтверждает, но gparted показывает, что раздел достаточно большой

    Есть ли эквивалент sudoedit для vimdiff?

    Linux и Unix - лучшая ОС в мире.