Как узнать, когда служба systemd была запущена / остановлена ​​/ перезапущена?

Buildroot 2016.05 + Midori

Buildroot - отличный инструмент для сборки минимальных дистрибутивов:

  • вы даете ему файл .config
  • он скачивает и компилирует все необходимое ПО и зависимости, и выдает образ

Midori минималистичного браузера на основе WebKitа Buildroot имеет встроенный пакет Midori.

.config используемый файл: https://github.com/cirosantilli/buildroot-configs/blob/32d1174e0bf8d00b92323eebe8901af3f8c389d3/2016.05/qemu_x86_64_x11_midori_defconfig

How to generate that config file:

  1. Follow: Как установить X11 на мою собственную систему Linux Buildroot? | Unix & Linux Stack Exchangeдля создания образа с X11.
  2. make menuconfig
    1. Toolchain
      1. Библиотека C
        1. glibc (для midori)
    2. Целевые пакеты
      1. Графические библиотеки и приложения
        1. mesa3d
          1. выбрать все драйвера Gallium и DRI, так как я не понимаю, какой из них нужен (для OpenGL EGL)
          2. OpenGL EGL (для libgtk3)
      2. Библиотеки
        1. Графика 1. libgtk3 (для midori)

Чистим сборку, потому что мы изменили toolchain и собираем снова:

rm -rf output
make BR2_JLEVEL=$(nproc)

Ждем несколько часов. Затем как обычно:

qemu-system-x86_64 \
    -enable-kvm \
    -M pc \
    -m 512 \
    -kernel output/images/bzImage \
    -drive file=output/images/rootfs.ext2,if=virtio,format=raw \
    -append root=/dev/vda \
    -net nic,model=virtio \
    -net user

И изнутри QEMU:

root
startx

и из X11 GUI щелкаем окно xterm и запускаем:

midori

Результат:

enter image description here

Размер изображения: 220M! Сравните это с 28M голой системы X11 Как установить X11 на мою собственную систему Linux Buildroot? - Unix & Linux Stack Exchange . Вероятно, из-за зависимостей WebKit + GTK3.

Проверено на хосте Ubuntu 16.04, QEMU 2.5.0.

NetSurf

Написан на SDL, который поддерживает fbdev: http://www.netsurf-browser.org/about/screenshots/#framebuffer

fbdev - это интерфейс нижнего уровня, предлагаемый модулем ядра Linux, который не проходит через X11 (я думаю, X11 может опционально использовать его в качестве бэкенда). По сути, вы просто записываете данные в память, и они отображаются на экране.

Чтобы использовать fbdev в Ubuntu, вы должны быть на TTY (например, Ctrl + Alt + F1).

Так что вы, вероятно, сможете обойтись без изображения гораздо меньшего размера, чем у Midori.

В Buildroot 2016.05 есть пакет netsurf-buildsystem, который должен это обеспечить, но я не тестировал. Если кому-то удастся запустить его, пожалуйста, добавьте ссылку на .config, скриншот и размер изображения.

10
23.09.2017, 22:43
4 ответа

С конфигурацией по умолчанию в Debian непривилегированный пользователь не будет иметь доступа ни к журналам systemd-journald, ни к журналам syslog. Если вы вошли в систему как обычный пользователь, вы получите этот ответ от journalctl:

$ journalctl 
No journal files were found.

, что немного сбивает с толку.

Если вы вошли в систему как root, journalctl --unit=yourservice должен предоставить вам информацию, которую вы ищете. После systemctl перезапуска bind9 на моем сервере я получаю это после journalctl --unit=bind9:

Jun 03 18:20:24 ns systemd[1]: Stopping BIND Domain Name Server...
Jun 03 18:20:24 ns named[27605]: received control channel command 'stop'
Jun 03 18:20:24 ns systemd[1]: Starting BIND Domain Name Server...
Jun 03 18:20:24 ns systemd[1]: Started BIND Domain Name Server.

Если я убью bind9 явно с помощью kill -9 , journalctl --unit=bind9 дает:

Jun 03 18:46:25 ns systemd[1]: bind9.service: main process exited, code=killed, status=9/KILL
Jun 03 18:46:25 ns rndc[28028]: rndc: connect failed: 127.0.0.1#953: connection refused
Jun 03 18:46:25 ns systemd[1]: bind9.service: control process exited, code=exited status=1
Jun 03 18:46:25 ns systemd[1]: Unit bind9.service entered failed state.
Jun 03 18:46:25 ns systemd[1]: bind9.service holdoff time over, scheduling restart.
Jun 03 18:46:25 ns systemd[1]: Stopping BIND Domain Name Server...
Jun 03 18:46:25 ns systemd[1]: Starting BIND Domain Name Server...
Jun 03 18:46:25 ns systemd[1]: Started BIND Domain Name Server.

Первая строка указывает, что процесс умер, потому что он был убит.

systemd-journald также пересылает все сообщения журнала в syslog, поэтому вы также должны найти эти сообщения в /var/log/syslog.

Systemd и systemd-journald имеют конфигурацию по умолчанию, скомпилированную в конфигурации, которую можно изменить в /etc/systemd/system.conf и /etc/systemd/journald.conf.

Может быть полезно знать, что по умолчанию systemd-journald хранит журналы в папке /run, то есть tmpfs, и поэтому исчезает после перезагрузки. Это означает, что для того, чтобы получить сообщения журнала старше последней загрузки, вам придется просмотреть файлы системного журнала. В этом случае journalctl не будет давать вам журналы старше последней загрузки. Это можно изменить в /etc/systemd/journald.conf, установив Storage=persistent.

Страницы руководства, которые документируют это:

man 8 systemd-journald
man 5 journald.conf
man 5 systemd-system.conf
man 5 systemd-user.conf

Также обратите внимание, что для автоматического перезапуска службы systemd это должно быть настроено в его файле .service. От man 5 systemd.service:

   Restart=
       Configures whether the service shall be
       restarted when the service process exits, is
       killed, or a timeout is reached. The service
       process may be the main service process, but it
       may also be one of the processes specified with
       ExecStartPre=, ExecStartPost=, ExecStop=,
       ExecStopPost=, or ExecReload=. When the death
       of the process is a result of systemd operation
       (e.g. service stop or restart), the service
       will not be restarted. Timeouts include missing
       the watchdog "keep-alive ping" deadline and a
       service start, reload, and stop operation
       timeouts.

       Takes one of no, on-success, on-failure,
       on-abnormal, on-watchdog, on-abort, or always.
       If set to no (the default), the service will
       not be restarted.
4
27.01.2020, 20:01

Вы можете увидеть время последнего запуска или перезапуска службы. Используйте service chatty status или systemctl status chatty. Вот примеры для службы apache2 или httpd:

# service apache2 status
● apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2)
  Drop-In: /lib/systemd/system/apache2.service.d
       └─forking.conf
   Active: active (running) since ven. 2017-06-02 15:53:01 CEST; 21min ago
  Process: 14773 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
  Process: 22912 ExecReload=/etc/init.d/apache2 reload (code=exited, status=0/SUCCESS)
  Process: 14880 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/apache2.service

строка Active: активна (работает) с вл. 2017-06-02 15:53:01 CEST; 21 минута назад покажите, как работает служба, но я не знаю, сможете ли вы отобразить как «список» именно то, что ищете.

# systemctl status httpd

● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2019-10-11 00:35:58 EEST; 1 weeks 3 days ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 29728 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
 Main PID: 10722 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   Memory: 8.7M
3
27.01.2020, 20:01

Если вам нужно написать это в скрипте, вы должны использовать systemctl showкоманда. Это полезнее для скриптов, чем пытаться разобрать что-нибудь из status. Например, чтобы узнать, когда последний раз запускалась служба, вы можете использовать:

$ systemctl show systemd-journald --property=ActiveEnterTimestamp
ActiveEnterTimestamp=Wed 2017-11-08 05:55:17 UTC

Если вы хотите увидеть все доступные свойства, просто опустите флаг, и он выведет их все.

$ systemctl show <service_name>

Документацию по этим свойствам можно найти здесь .

19
27.01.2020, 20:01

Мы можем использовать опцию -fдля фильтрации сообщений из журнала(https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html).

journalctl -f _TRANSPORT=journal example
0
27.01.2020, 20:01

Теги

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