Системный таймер: получить последнее выполнение в формате 8601

Можно ли получить время последнего выполнения из системного таймера?

Пример:

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

Есть ли команда, которая будет печатать LAST колонка в формате ISO8601? Или мне нужно идти трудным путем?

1 ответ

Решение

Все systemd Свойства объектов могут быть запрошены:

systemctl show $unit

Индивидуальные свойства могут быть запрошены:

systemctl show $unit -p $property --value

Технически, это не ответ на ваш вопрос, потому что таймеры не "выполнены", но предположим, что вы хотите посмотреть на единицу, на которую ссылается таймер, тогда вы можете запросить его последнее время "запуска" с помощью:

systemctl show $unit -p ExecMainStartTimestamp --value

и его последнее время "остановки" с:

systemctl show $unit -p ExecMainExitTimestamp --value

Они производят результаты в виде So 2017-04-16 19:19:12 UTC (в моей системе для моей локали), который не является ни ISO 8601, ни пригодным для передачи (GNU) date, Но если вы установите LC_TIME в вызове C, вы можете обрабатывать данные дальше (при условии, что вы используете GNU date или аналогичный инструмент):

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

Это (например) вернет 2017-04-16,

До версии 230, systemd не предоставил --value option и вместо этого возвращает значение свойства, которому предшествуют имя свойства и знак равенства. В этом случае вы должны извлечь значение свойства из данных самостоятельно, например, с помощью sed:

date --date="$(LC_TIME=C systemctl show $unit -p ExecMainExitTimestamp | sed -e 's/^[^=]\+=//;')" -I
Другие вопросы по тегам