Системный таймер: получить последнее выполнение в формате 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