systemd timer: Obtenha a última execução no formato 8601

1

É possível obter o último tempo de execução de um timer do systemd?

Exemplo:

systemctl list-timers dnf-automatic.timer
NEXT                          LEFT     LAST                          PASSED  UNIT                ACTIVATES
Wed 2017-04-12 08:02:56 CEST  21h left Mon 2017-04-10 15:49:27 CEST  18h ago dnf-automatic.timer dnf-automatic.service

Existe um comando que imprime a coluna LAST no formato ISO8601? Ou preciso ir pela pior maneira?

    
por user3549596 11.04.2017 / 10:31

1 resposta

1

Todas as propriedades de systemd units 'podem ser consultadas por:

systemctl show $unit

As propriedades individuais podem ser consultadas por:

systemctl show $unit -p $property --value
Tecnicamente, isso não é uma resposta à sua pergunta porque os cronômetros não são "executados", mas suponha que você queira olhar para a unidade a que o cronômetro se refere, então você pode consultar seu último horário "inicial" com:

systemctl show $unit -p ExecMainStartTimestamp --value

e seu último horário de "parada" com:

systemctl show $unit -p ExecMainExitTimestamp --value

Estes produzem saídas na forma de So 2017-04-16 19:19:12 UTC (no meu sistema para minha localidade), que não é ISO 8601 nem é alimentável para (GNU) date . Mas se você definir LC_TIME na chamada para C , poderá processar os dados ainda mais (desde que você use o GNU date ou uma ferramenta semelhante):

date --date="$(LC_TIME=C systemctl show $unit -p ExecMainExitTimestamp --value)" -I

Isso (por exemplo) retornará 2017-04-16 .

Antes da versão 230, systemd não fornecia uma opção --value e, em vez disso, retornava o valor da propriedade precedido pelo nome da propriedade e por um sinal de igual. Nesse caso, você precisa extrair o valor da propriedade dos dados, por exemplo, com sed :

date --date="$(LC_TIME=C systemctl show $unit -p ExecMainExitTimestamp | sed -e 's/^[^=]\+=//;')" -I
    
por 17.04.2017 / 08:12