Existe uma maneira de fazer o journalctl mostrar os logs da “última vez que o foo.service foi executado”?

10

Estou particularmente interessado nisso para ver a saída de serviços que são executados em um timer. O sinalizador --unit está próximo, mas concatena todas as execuções do serviço juntas. A maneira mais óbvia que posso pensar seria filtrar no PID, mas isso me preocupa com a reutilização / serviços do PID, e obter o último PID é bastante inconveniente. Existe algum outro identificador que corresponda a uma única execução de um serviço, que eu poderia usar para filtrar os logs?

EDIT: Eu ficaria feliz em aceitar um "não" autoritário se essa for a verdadeira resposta.

    
por Jack O'Connor 07.04.2016 / 22:48

5 respostas

11

Não tenho certeza de qual timestamp faz mais sentido, mas isso funciona para mim. Espero que haja uma maneira melhor de trabalhar com os timestamps de systemctl show than awk - não consegui descobrir como controlar o formato de timestamps.

unit=foo.service

ts=$(systemctl show -p ActiveEnterTimestamp $unit)

echo $ts
ActiveEnterTimestamp=Fri 2016-11-11 12:30:01 MST

journalctl -u $unit --since "$(echo $ts | awk '{print $2 $3}')"
    
por 11.11.2016 / 20:49
4

Você pode usar o sinalizador de inicialização para buscar apenas os logs daquela inicialização. por exemplo

journalctl _SYSTEMD_UNIT=avahi-daemon.service -b 5
    
por 11.04.2016 / 21:33
2

Estes podem ajudá-lo:

  • journalctl -u foo.service | tail -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 carimbo de data e hora da última execução e usar esse carimbo de data / hora com a opção --since.

    
por 12.04.2016 / 11:46
2

Você pode usar filtros de campo com o Journalctl. Por exemplo,

journalctl _PID=1234

Obtenha uma lista de todos os campos disponíveis usando:

journalctl --fields --unit kubelet

Um campo disponível é _PID .

Você pode obter o PID de um processo em execução usando pidof ou systemctl show --property MainPID <SERVICE_NAME>

Então, aqui está como eu obtenho os logs do processo atual do Kubernetes:

# journalctl --unit kubelet _PID=$(systemctl show --property MainPID kubelet 2>/dev/null | cut -d= -f2) | head

Agora me diga por que o Kubernetes é tão difícil de instalar: - (

    
por 14.12.2016 / 18:17
0

journalctl -r | grep -m1 foo.service

    
por 21.08.2018 / 23:52

Tags