Я работаю над встроенной системой. Я написал генератор окружения на bash, и он, кажется, работает отлично. Однако в журнале появляются некоторые ошибки:
May 28 02:03:14 imx6ull14x14evk systemd[121]: /etc/systemd/system-environment-generators/overlayroot-ubifs.sh failed with exit status 32.
May 28 02:03:14 imx6ull14x14evk systemd[121]: Invalid variable assignment "overlay /mnt/user/overlay overlay rw,noatime,lowerdir=...", ignoring.
May 28 02:03:14 imx6ull14x14evk systemd[121]: Invalid variable assignment "overlay / overlay rw,relatime,lowerdir=...", ignoring.
May 28 02:03:14 imx6ull14x14evk systemd[121]: Invalid variable assignment "devtmpfs /orig/dev devtmpfs rw,relatime,size=...", ignoring.
May 28 02:03:14 imx6ull14x14evk systemd[121]: Invalid variable assignment "tmpfs /orig/run tmpfs rw,nosuid,nodev,mode=...", ignoring.
Я заметил, что и stdout, и stderr, похоже, подавлены. регистраторне работает, может быть потому чтоsystemd-journald.сервисеще не началось? Или может потому чторегистраторизbusyboxи это не совместимо? Я заметил, чтопоки/йоктопо умолчанию пишут вrsyslogотрегистратор, а не журнал systemd.
Если я включаю systemd.log_level=debug как аргумент загрузки ядра, мои ошибки исчезают (смущает). Мои ошибки не вредят ничему, насколько я могу судить, но я хотел бы это исправить. Настройкаsystemd.log_level=отладказаставляет других генераторов быть отмеченными в журнале:
May 28 02:14:43 imx6ull14x14evk kernel: UBIFS (ubi0:1): FS size: 424099840 bytes (404 MiB, 1670 LEBs), journal size 21331968 bytes (20 MiB, 84 LEBs) mber 2 using ci_hdrck_data_crc mtdparts=gpmi-nand:4m(nandboot),-(nandubi)
3 imx6ull14x14evk kernel: UBIFS (ubi0:1): reserved for root: 4952683 bytes (4836 KiB)
May 28 02:14:43 imx6ull14x14evk kernel: UBIFS (ubi0:1): media format: w5/r0 (latest is w5/r0), UUID 29F89BD4-13AA-4118-B7B7-2B15D8F97EDB, small LPT model
May 28 02:14:43 imx6ull14x14evk systemd-rc-local-generator[196]: /etc/rc.local does not exist, skipping.
May 28 02:14:43 imx6ull14x14evk systemd-hibernate-resume-generator[195]: Not running in an initrd, quitting.
May 28 02:14:43 imx6ull14x14evk systemd-getty-generator[193]: Automatically adding serial getty for /dev/ttymxc0.
May 28 02:14:43 imx6ull14x14evk systemd-gpt-auto-generator[194]: Neither root nor /usr file system are on a (single) block device. vice= 3.18
le entries: 513 imx6ull14x14evk systemd-fstab-generator[192]: Parsing /etc/fstab...
Так как жеsystemd-rc-локальный-генераторсоздать сообщение
/etc/rc.local не существует, пропускаем
в журнале? Должен ли я написать свой генератор окружения на языке C, чтобы иметь возможность печатать сообщения (я готов, если это требуется)? Могу ли я получать сообщения без установкиsystemd.log_level=отладка?
решение1
Вы не можете войти в журнал, потому что журнал еще не запущен в этот момент. Действительно, вся фишка в том, что генераторы systemd могут создавать новые файлы юнитов, заключается в том, что они запускаются добуквально любойМодуль systemd запущен.
Однако вы можете войти в системубуфер журнала ядра(т.е. dmesg
буфер), и ваши сообщения будут импортированы journald вместе со всеми другими сообщениями ядра.
Для этого напишите сообщение на адрес /dev/kmsg
, по желанию с префиксом серьезности в стиле ядра:
echo "foobar-generator[$$]: Something's going on" > /dev/kmsg
echo "<4>foobar-generator[$$]: Warning, an error is about to occur" > /dev/kmsg
echo "<3>foobar-generator[$$]: An error just occured" > /dev/kmsg
Серьезность можно указать с помощью <n>
префиксов " ", также как и в syslog. (Например, 3 — это LOG_ERR, 4 — это LOG_WARN, 7 — это LOG_DEBUG.) И да, вам нужно самостоятельно добавить метку "process[pid]:" в стиле syslog.