Как найти время работы с момента последнего пробуждения из режима ожидания

Я хочу знать время работы с момента последнего пробуждения из режима ожидания.

Команда uptime показывает только разницу между текущим временем и минусом времени последнего запуска.

15 ответов

В /var/log/pm-suspend.logищите последнюю строку, похожую на эту:

Sun Dec 16 09:30:31 CET 2012: Awake.

Это ваше последнее время пробуждения. Вы можете рассчитать время безотказной работы с тех пор, как предложил Пол.

Периодически ваш logrotate будет "вращать" журналы, чтобы они не становились слишком большими, поэтому вы можете найти пустое pm-suspend.log файл. В этом случае просто посмотрите на pm-suspend.log.1 файл (вы можете найти и другие файлы журнала, названные как pm-suspend.log.2.gz и так далее; Вы можете изучить их, используя zcat или же zless).

Программа pm-suspend - не единственная возможность приостановить работу компьютера. Мой журнал этой программы теперь пуст, но я нашел более надежную команду:

cat /var/log/syslog | grep 'systemd-sleep' | grep "Suspending\|resumed"

И вывод:

Oct  2 09:11:48 dmatej-lenovo systemd-sleep[931]: Suspending system...
Oct  2 09:53:10 dmatej-lenovo systemd-sleep[931]: System resumed.
Oct  2 15:02:48 dmatej-lenovo systemd-sleep[27516]: Suspending system...
Oct  2 16:07:19 dmatej-lenovo systemd-sleep[27516]: System resumed.
Oct  2 16:32:48 dmatej-lenovo systemd-sleep[29622]: Suspending system...
Oct  2 17:16:41 dmatej-lenovo systemd-sleep[29622]: System resumed.
Oct  3 00:24:58 dmatej-lenovo systemd-sleep[21316]: Suspending system...
Oct  3 08:17:22 dmatej-lenovo systemd-sleep[21316]: System resumed.
Oct  3 09:09:25 dmatej-lenovo systemd-sleep[24739]: Suspending system...
Oct  3 09:50:47 dmatej-lenovo systemd-sleep[24739]: System resumed.

Ни один из этих ответов не работал для меня. Но я с пользой нашел sleep.target который сделан именно для этого:

$ journalctl -n4 -u sleep.target
nov. 17 17:16:37 kaa systemd[1]: Reached target Sleep.
nov. 17 18:46:22 kaa systemd[1]: Stopped target Sleep.
nov. 17 19:27:31 kaa systemd[1]: Reached target Sleep.
nov. 17 19:45:21 kaa systemd[1]: Stopped target Sleep.

Для настольных компьютеров / серверов, работающих под управлением systemd, хотя нет прямой команды, которая сообщит информацию напрямую (насколько мне известно), все данные записываются в журнал.

Вы можете записать журнал, например:

echo ">> [SUSPEND] Times during current boot"
journalctl -b 0 |grep "]: Suspending system..."
echo ">> [WAKE] Times during current boot"
journalctl -b 0 |grep "PM: Finishing wakeup"

Или, для необычного вывода, я написал скрипт на python3 (отлично работает на Fedora 23) Пример вывода:

Initial Boot Timestamp:  2016-01-15 09:31:32 

     Wake Timestamp     |    Suspend Timestamp   |       Awake Time       |
  --------------------  |  --------------------  |  --------------------  |
   2016-01-15 09:31:32  |   2016-01-15 09:36:03  |          0h  4m        |
   2016-01-15 09:36:22  |   2016-01-15 19:15:04  |          9h 38m        |
   2016-01-15 19:22:21  |   2016-01-15 20:00:05  |          0h 37m        |
   ...
   -------------------  |  --------------------  |  --------------------  | 

Summary: Days Since Boot [8.23] | Days Awake [4.14] | Suspend/Wake Cycles: [28]

Скрипт в github. ссылка на репозиторий github

У меня не было pm-suspend.log на моей машине.

Это сработало для меня:

/usr/bin/pmset -g log | grep Wake | grep "due to" | tail -n1

Также говорит, что разбудил компьютер.:-)

Изменен лучший вариант ответа шага

grep ': Awake' /var/log/pm-suspend.log

редактировать хаха спасибо за комментарии:D

Найдите последнее вхождение строки "PM: восстановление устройств завершено" в /var/log/messages. Если ваша машина работала слишком долго, тогда журнал может быть повернут.

Вы можете использовать tuptime для отслеживания запуска / выключения системы.

Что вы используете для запуска в режиме ожидания?

Если вы можете использовать скрипт, то после строки

echo -n "standby" > /proc/acpi/sleep

Вы могли бы иметь линию

echo `date +%s` >> /var/log/wakeups.log

Или что-то подобное. Это будет означать, что первое, что машина сделала, когда проснулась, это записала текущее время и дату в файл журнала (n секунд с начала эпохи).

затем tail -1 /var/log/wakeups.log даст вам в последний раз. Вы можете вычесть это из текущего времени, чтобы получить секунды с момента последнего пробуждения.

Я думаю, что это очень надежный способ сделать это:

systemd[1]: Started Run anacron jobs at resume

Поиск, когда ОС запускает Anacron, произойдет, однако машина включена

Расширяя шаги ответ:

grep Awake /var/log/pm-suspend.log | tail -1

Это получит линию с последним временем пробуждения.

Отвечать:

      journalctl -r -S "1 day ago" | grep "System returned from sleep state" | head -1 | awk '{print $1, $2, $3}' | {read last_wake_up; echo $(($(date --date="now" +%s) - $(date --date="$last_wake_up" +%s)))} | {read sec ; eval "echo $(date -ud "@$sec" +'$((%s/3600/24)) days %H hours %M minutes %S seconds')"}

результат:

      0 days 07 hours 37 minutes 07 seconds

Немного более короткий ответ:

      journalctl -r -S "1 day ago" | grep "System returned from sleep state" | head -1 | awk '{print $1, $2, $3}' | {read last_wake_up; echo $(( ($(date --date="now" +%s) - $(date --date="$last_wake_up" +%s) )/(60*60) ))"h"}

результат:

      6h

(проверено на Ubuntu 22.04.1 LTS, ядро ​​5.15).


Если вы хотите увидеть минуты, измените на(60)))"m".

Если вы хотите увидеть дни, измените(60*60)))"h"к(60*60*24)))"d".

Если вы хотите видеть только журнал последнего пробуждения, используйте:

      journalctl -r -S "1 day ago" | grep "System returned from sleep state" | head -1

Пожалуйста, имейте в виду, что хорошо иметь определение «с тех пор», как-Sв команде Journalctl, потому что там очень много логов. У меня на машине 3 905 300 строк, а за последний день всего 14 733.

«Поскольку» можно также определить как-S "2022-08-29 12:20".

Если вы хотите узнать время последнего пробуждения в Ubuntu 19.04, вы также можете:

grep sleep /var/log/auth.log*

      auth.log.1:Feb 29 17:49:12 systemd-logind[694]: Operation 'sleep' finished.
auth.log.1:Mar  1 09:39:01 systemd-logind[694]: Operation 'sleep' finished.

Я добавляю этот ответ, потому что у меня нетpm-suspendфайл, как предлагалось использовать в других ответах.

Я использовал журнал ядра, чтобы узнать время пробуждения.

      wakeup=$(grep 'PM: suspend exit' /var/log/kern.log | tail -n1 | cut -c -15)
awake=$(( $(date +%s) - $(date --date "$wakeup" +%s) ))

Этот журнал должен быть довольно маленьким и удобным для поиска.

Все остальные ответы либо не работали в моей системе (Ubuntu 22.04 LTS), либо требовали установки чего-то еще.

На fedora с использованием ripgrep

rg Suspend /var/log/messages

результат:

34338:Jul 26 03:03:46 <hostname> systemd-sleep: Suspending system...
Другие вопросы по тегам