我有一个每晚运行的备份脚本。如果我的(Linux)主机被挂起,它会在脚本运行之前被另一台主机唤醒。
我希望能够在备份完成后再次暂停我的主机,但前提是它被唤醒以运行脚本。如果它之前正在运行,我想让它继续运行。
有什么方法可以获取主机上次从挂起到内存唤醒时的信息吗?
答案1
您的发行版有一个电源管理框架(这很明显,因为它已经自行挂起),该框架在即将挂起/休眠/关闭以及恢复/打开时运行一些脚本。如果您搜索“电源管理”,您应该能够找到有关它的良好文档。
该任务可能只是将脚本放置在适当的目录中。该脚本可以像这样简单date +%s > /var/last-wake-time
。然后您现有的脚本将简单地查看该文件。
一般来说,并不是每个发行版都附带电源管理实用程序,并且有多种工具可供查看。您可以查看acpid
、、、uPower
和pm-utils
。laptop-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