Estou usando o Ubuntu 16.04 e estou vendo um comportamento estranho ao analisar os logs do journalctl.
Aqui está uma saída não filtrada (usei a saída do json para incluir todos os campos relevantes):
$ journalctl -o json-pretty --since "2018-01-11 12:00:00" --until "2018-01-11 12:00:05"
{
"__CURSOR" : "s=bac060082d1c447a972958f176cdcec7;i=1d2a2e;b=a948062f9f0b4091ae299c0523a99111;m=337bc483bf3;t=5627c5f8a3bae;x=7fd2518d6b70b9d",
"__REALTIME_TIMESTAMP" : "1515661201914798",
"__MONOTONIC_TIMESTAMP" : "3537916935155",
"_BOOT_ID" : "a948062f9f0b4091ae299c0523a99111",
"_TRANSPORT" : "stdout",
"PRIORITY" : "6",
"SYSLOG_FACILITY" : "3",
"SYSLOG_IDENTIFIER" : "start.sh",
"_PID" : "6474",
"_UID" : "1000",
"_GID" : "1000",
"_COMM" : "start.sh",
"_EXE" : "/bin/bash",
"_CMDLINE" : "/bin/bash /usr/local/malibu/start.sh",
"_CAP_EFFECTIVE" : "0",
"_SYSTEMD_CGROUP" : "/system.slice/malibu.service",
"_SYSTEMD_UNIT" : "malibu.service",
"_SYSTEMD_SLICE" : "system.slice",
"_MACHINE_ID" : "f03ff2ad269ea529c82323dd57f29b00",
"_HOSTNAME" : "terminal",
"MESSAGE" : "2018-01-11 12:00:01.914 DEBUG: malibu.devices.validator.ValidatorPortService$ - health check succeeded"
}
Como você pode ver, a saída contém uma única mensagem de log.
Mas se eu adicionar filtro por nome de unidade ( -u malibu.service
), esta mensagem desaparece:
$ journalctl -u malibu.service -o json-pretty --since "2018-01-11 12:00:00" --until "2018-01-11 12:00:05"
O nome da unidade é exatamente igual ao campo _SYSTEMD_UNIT
na saída não filtrada. Por que journalctl não o exibe na versão filtrada?
EDIT: Acontece que eu estava usando a versão antiga do systemd - 229, enquanto o mais recente é o 236, e usar o journalctl mais recente corrige esse problema. Infelizmente, 229 é a última versão systemd disponível para o 16.04 LTS, então não vejo uma solução sensata para o problema (além de construir o systemd mais recente no espaço do usuário e usar o binário journalctl recém construído diretamente).