确定最后一次挂起的时间(-to-ram)

确定最后一次挂起的时间(-to-ram)

我有一个每晚运行的备份脚本。如果我的(Linux)主机被挂起,它会在脚本运行之前被另一台主机唤醒。

我希望能够在备份完成后再次暂停我的主机,但前提是它被唤醒以运行脚本。如果它之前正在运行,我想让它继续运行。

有什么方法可以获取主机上次从挂起到内存唤醒时的信息吗?

答案1

您的发行版有一个电源管理框架(这很明显,因为它已经自行挂起),该框架在即将挂起/休眠/关闭以及恢复/打开时运行一些脚本。如果您搜索“电源管理”,您应该能够找到有关它的良好文档。

该任务可能只是将脚本放置在适当的目录中。该脚本可以像这样简单date +%s > /var/last-wake-time。然后您现有的脚本将简单地查看该文件。

一般来说,并不是每个发行版都附带电源管理实用程序,并且有多种工具可供查看。您可以查看acpid、、、uPowerpm-utilslaptop-mode tools

答案2

我最终检查了 pm-utils 日志文件,因为它是开箱即用的。但是,它取决于 pm-utils 日志消息的格式,因此可能会因新版本的 pm-utils 而中断。

它目前适用于 Arch Linux 和 OpenSuSE 11.4/Tumbleweed 以及可能所有其他尚未修补 pm-utils 的发行版。

如果机器在过去 10 分钟(600 秒)内从挂起状态唤醒,以下代码将 NEED_SUSPEND 设置为 1:

# Check if we need to suspend afterwards
if [[ -e /var/log/pm-suspend.log ]]; then
    RESUME_DATE="$(egrep 'Running hooks for (resume|thaw)' /var/log/pm-suspend.log | tail -n 1 | sed 's/^\(.*\):.*$/\1/')"
    if [[ -n "$RESUME_DATE" ]]; then
        RESUME_SECS="$(date --date="$RESUME_DATE" +%s)"
        NOW_SECS="$(date +%s)"
        SECS_SINCE_RESUME=$(( $NOW_SECS - $RESUME_SECS ))
        if [[ $SECS_SINCE_RESUME -lt 600 ]]; then
            NEED_SUSPEND=1
        fi
    fi
fi

相关内容