毎晩実行されるバックアップスクリプトがあります。私の(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