/var/log/messages
, /var/log/syslog
та деякі інші файли журналів використовують часову позначку, яка містить абсолютний час, наприклад Jan 13 14:13:10
.
/var/log/Xorg.0.log
і /var/log/dmesg
, як і вихід $ dmesg
, використовувати формат, який виглядає так
[50595.991610] malkovich: malkovich malkovich malkovich malkovich
Я здогадуюсь / збираю, що цифри представляють секунди та мікросекунди з моменту запуску.
Однак моя спроба співвіднести ці два набори часових позначок (з використанням виводу з uptime
) дала розбіжність приблизно в 5000 секунд.
Це приблизно час, за який мій комп'ютер був призупинений.
Чи є зручний спосіб відображення числових часових позначок, використовуваних dmesg та Xorg, в абсолютні часові позначки?
оновлення
Як попередній крок до вирішення цього питання, а також для того, щоб сподіватись, що моє питання буде трохи зрозумілішим, я написав сценарій Python для розбору /var/log/syslog
та виведення часу на перекос. На моїй машині, що працює у ubuntu 10.10, цей файл містить численні рядки, що походять з ядра, які штампуються як часовою міткою dmesg, так і часовою міткою syslog. Сценарій виводить рядок для кожного рядка у цьому файлі, який містить часову позначку ядра.
Використання:
python syslogdriver.py /var/log/syslog | column -nts $'\t'
Вихідний вихід (див. Нижче для визначення стовпців):
abs abs_since_boot rel_time rel_offset message
Jan 13 07:49:15 32842.1276569 32842.301498 0 malkovich malkovich
... rel_offset
становить 0 для всіх проміжних ліній ...
Jan 13 09:55:14 40401.1276569 40401.306386 0 PM: Syncing filesystems ... done.
Jan 13 09:55:14 40401.1276569 40401.347469 0 PM: Preparing system for mem sleep
Jan 13 11:23:21 45688.1276569 40402.128198 -5280 Skipping EDID probe due to cached edid
Jan 13 11:23:21 45688.1276569 40402.729152 -5280 Freezing user space processes ... (elapsed 0.03 seconds) done.
Jan 13 11:23:21 45688.1276569 40402.760110 -5280 Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done.
Jan 13 11:23:21 45688.1276569 40402.776102 -5280 PM: Entering mem sleep
... rel_offset
становить -5280 для всіх рядків, що залишилися ...
Jan 13 11:23:21 45688.1276569 40403.149074 -5280 ACPI: Preparing to enter system sleep state S3
Jan 13 11:23:21 45688.1276569 40403.149477 -5280 PM: Saving platform NVS memory
Jan 13 11:23:21 45688.1276569 40403.149495 -5280 Disabling non-boot CPUs ...
Jan 13 11:23:21 45688.1276569 40403.149495 -5280 Back to C!
Jan 13 11:23:21 45688.1276569 40403.149495 -5280 PM: Restoring platform NVS memory
Jan 13 11:23:21 45688.1276569 40403.151034 -5280 ACPI: Waking up from system sleep state S3
... Фінальні лінії знаходяться трохи далі, все ще значно вище кінця виходу. Деякі з них, ймовірно, були записані в dmesg
циркулярний буфер до того, як призупинення трапилося, і лише syslog
після цього їх поширювали . Це пояснює, чому всі вони мають однакову часову позначку syslog.
Визначення стовпців:
abs
- час, зареєстрований системою syslog.
abs_since_boot
- це той самий час у секундах з моменту запуску системи, виходячи із вмісту /proc/uptime
та значення time.time()
.
rel_time
є часовою міткою ядра.
rel_offset
- різниця між abs_since_boot
і rel_time
. Я округляю це до десятків секунд, щоб уникнути одноразових помилок через абсолютні (тобто syslog
-генеровані) часові позначки лише з секундами точністю. Це насправді не правильний спосіб зробити це, оскільки це дійсно (я думаю ..) просто призводить до менших шансів виникнення помилки поза 10. Якщо хтось має кращу ідею, будь ласка, дайте мені знати.
У мене також є деякі питання щодо формату дати syslog; зокрема, мені цікаво, чи з’явиться рік у ньому. Я гадаю, що ні, і в будь-якому випадку, швидше за все, я міг би допомогти мені в цій інформації в TFM, але якщо хтось знає, це буде корисно. .. Звичайно, припускаючи, що хтось використовує цей скрипт у якийсь момент майбутнього, а не просто перериває пару рядків коду Perl.
Далі:
Отже, якщо мені не дасть якихось привітань одкровення, наступним моїм кроком буде додавання функції, щоб отримати перекос часу для заданої часової позначки ядра. Я повинен бути в змозі подати сценарій одним або набором системних журналів разом із часовою міткою ядра, щоб отримати абсолютну мітку часу. Тоді я можу повернутися до налагодження моїх проблем Xorg, які покинуть мене.
Freezing user space processes
чого це чітко робиться перед сном.
[12345.6789]..
), випромінюваного ядром, тому він робить все правильно , з урахуванням питань, що стосуються мого останнього коментаря. Я не впевнений, що ядро насправді має тут робити; це залежить від того, що мають означати ці часові позначки щодо відновлення запуску. Час роботи (на відміну від часу після завантаження) може мати значення в деяких контекстах. Я думаю, в ідеалі було б достовірне записування обох цих цінностей.
sort
, рік, часовий пояс тощо. +1 для сценарію python.