Estou particularmente interessado nisso por observar a saída de serviços únicos executados em um cronômetro. O --unit
sinalizador está próximo, mas concatena todas as execuções do serviço juntas. A maneira mais óbvia que posso pensar seria filtrar o PID, mas isso me preocupa com a reutilização / serviços do PID que bifurcam e obter o último PID é bastante inconveniente. Existe algum outro identificador que corresponda a uma única execução de um serviço, que eu possa usar para filtrar os logs?
EDIT: Eu ficaria feliz em aceitar um "não" autoritário se essa for a resposta real.
Desde a
systemd
versão232
, temos o conceito de ID de invocação. Cada vez que uma unidade é executada, ela possui um ID de chamada exclusivo de 128 bits. Ao contrário doMainPID
que pode ser reciclado ouActiveEnterTimestamp
que pode ter problemas de resolução, é uma maneira segura de obter todo o log de uma invocação de unidade systemd específica.Para obter o ID de chamada mais recente de uma unidade
Para obter o diário da última invocação de, digamos,
openipmi
, tenha falhado ou não, você pode usar o one liner(Observe que o
--value
está disponível desdesystemd 230
, mais antigo queInvocationID
)Não tenho certeza de qual registro de data e hora faz mais sentido, mas isso funciona para mim. Espero que haja uma maneira melhor de trabalhar com os timestamps do
systemctl show
que o awk - não consegui descobrir como controlar o formato dos timestamps.Você pode usar o sinalizador de inicialização para buscar apenas os logs dessa inicialização. por exemplo
Estes podem ajudá-lo:
jornalctl -u foo.service | cauda -n 2
ou substitua 2 pelo número esperado de linhas
journalctl -u foo.service --since=' 2016-04-11 13:00:00 '
Você também pode combiná-los para obter primeiro o registro de data e hora do último tempo de execução e, em seguida, usar esse registro de data e hora com a opção --since.
Você pode usar filtros de campo com Journalctl. Por exemplo
Obtenha uma lista de todos os campos disponíveis usando:
Um campo disponível é
_PID
.Você pode obter o PID de um processo em execução usando
pidof
ousystemctl show --property MainPID <SERVICE_NAME>
Veja como obtenho os logs do processo atual do kubelet do Kubernetes:
Agora me diga por que o Kubernetes é tão difícil de instalar :-(
jornalctl -r | grep -m1 foo.service