@niha28niwa

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

pmset schedule wakeorpoweronで Deep Idle状態のスリープから復帰するには

解決したいこと

pmset schedule wakeorpoweronで
Deep Idle状態のスリープから復帰する。

OSなど

  • MacBook Pro2020
  • macOS Sequoia15.6
  • AC接続状態

状況

LaunchDaemonを使用して、
pythonファイルの定時実行を実現しようとしています。

pythonファイルの実行、
pmset schedule wakeorpoweronによるスリープ予約は機能しております。

pmset -g schedで予約があることを確認しているのですが、
予約時間になってもスリープから復帰しません。

対象時間の起動ログを調べると、何も出力されない状態になっております。

自分で試したこと−1

浅いスリープ状態だと、予約した時間にスリープから復帰できました。
15秒後や30秒後などです。

1〜3分後になると、スリープ復帰ができず、
その状態で手動でスリープから復帰すると
「Wake from Deep Idle」状態でした。

そのため何かしらの設定でDeep Idle状態から復帰できないようになっているのではないかと考えました。

自分で試したこと−2

以下の設定を変更してテストしてみたのですが、
スリープから復帰ができませんでした。

  • standby、hibernatemode 、autopoweroff を0に変更
  • acwake を1に変更

その他

Macのpmsetの仕様を見ても、スリープ復帰における制限の記載が見当たらず
同じような症状の記事も見つからず、
どうしてスリープから復帰できないのか、なにが原因なのかまったくわかっておりません。

0 likes

4Answer

難易度は上がりますがlaunchdを試しては如何でしょうか?
.plistを書くのが大変面倒ですが、systemdのような扱いは出来ます(ただ似てはいません)。
「macos launchd 定期実行」で検索すると色々と記事や便利ツールが出てきます。

0Like

Comments

  1. 「LaunchDaemonを使用して…定時実行を実現しようとしています」とのことなのですでに利用されているかと。

  2. @niha28niwa

    Questioner

    @STSynthe
    @uasi
    ご回答ありがとうございます。
    @uasi様が記載してくださった通り、現在LaunchDaemonを利用しております!

    LaunchDaemon自体は、Macがスリープ状態では実行されないという認識なのですが、
    LaunchDaemonの設定に、スリープ解除ができるような設定があるという事でしょうか?

  3. Macがスリープ状態では実行されない

    当方の環境が古い(10.15系)ため完全に同じとは言えません。が、その認識で合っていると思います。

    一応launchdでインターバルで定期実行するPythonをコチラでも試してましたが、止まります。
    これはpmset、GUIの省エネルギー設定で「スリープさせない」にチェックが有ろうが無かろうがどちらも同じ結果でした。
    システムのデーモンにしたら変わるのかまではちょっと試していませんが、同じ結果になりそうなのでしていません。

    ただコンソールでcaffeinateを走らせっぱなしにすることで、止まる現象を回避できたことを確認しています。


    pmset -a disablesleep 1でも止まらないことを確認していますが、文字通りスリープを無効にするだけあって、スリープ自体まったく発生しなくなる点に留意してください。

    caffeinatepmsetどちらにしてもスリープ下でスケジュール管理は難しいと思われます(man launchd.plistでもスリープ下では動かないと書かれてます)ので妥協するべきです。

  4. @niha28niwa

    Questioner

    実際に実行検証までしてくださり、ありがとうございます!

    LaunchDaemonがスリープ中は動かないので、
    スリープから復帰する予約であるpmset schedule wakeorpoweronを組み合わせれば
    機能すると考えたのですが、
    そもそもpmset schedule wakeorpoweron自体がスリープから復帰する力がないということでしょうか?(GUIの省エネルギー設定などを変えたとしても機能しない)

  5. man pmsetにも書かれてますが、正確性が無いだけで、コマンドpmset schedule wakeorpoweron "date+time"自体は有効でスリープから復帰はします。
    でもこれはキーやパッド操作した祭と挙動が同じです。
    その後にパスワードを要求(パスワードの要求をonにしている場合)されると思いますが、数十秒放置で再度スリープ状態に入り、1分以降に動作しないのはこの流れが原因かと思われます。

    当方の環境では、手動によるスケジュール指定によるスリープ復帰後にcaffeinateを組み合わせてPythonの実行を中断されること無く完走できています。
    (1分おきの)インターバルなのでスリープ後は動作しません。書き方次第で継続できるとは思いますがこれ以上の検証はしてません。

    .plistやPythonで行っている内容が不明ですのでこれ以上回答しかねます。
    既に妥協案は出ているのですから、そちらを検討すべきです。

  6. @niha28niwa

    Questioner

    LaunchDaemonですと、起動さえすれば
    ロック画面→パスコード画面→消灯となった際も
    実行されたため、そちらについては問題がないと考えております。

    pmsetを設定・予約しても、どうしても起動しない不具合があり困っていましたが
    そもそも正確性が無いという表記があったのですね。
    見逃していました...
    ありがとうございます!

    また、これ以上回答しかねる旨、承知いたしました!
    これまで回答してくださりありがとうございました!

  7. 正確性がないのは pmset relative で「スリープ/シャットダウンからn秒後に復帰」を指示した際の話(おそらく指定の秒数通りにはならないということ)で、 pmset schedule の正確性については言及がなさそうです。

    For sleep cycling applications, pmset can schedule a "relative" wakeup or poweron to occur in seconds from the end of system sleep/shutdown, but this event cannot be cancelled and is inherently imprecise.

  8. @niha28niwa

    Questioner

    ご親切にありがとうございます!
    そうなるとpmset自体が正常に作動しないのが、やはり謎ですね...

    もう少し試してみて改善しないようであれば
    ・スリープさせないで実装
    それが不都合になる場合は
    ・外部サーバーの検討で処理をしようと思います。

    お力添えくさだり、ありがとうございました!

Comments

  1. @niha28niwa

    Questioner

    そうだったのですね...!
    存じませんでした、ありがとうございます🙇

そもそもスリープさせないという方針は取れますか? AC 接続中はディスプレイだけ切って本体をスリープさせないように電源設定すれば定期実行は実現できそうです。

0Like

Comments

  1. @niha28niwa

    Questioner

    可能であれば、スリープ状態でも wakeorpoweron で起きてくれる状態が理想ではあります。
    ですが、どうにもならない場合は、AC接続中はスリープさせないという設定も視野に入れて検証いたします。
    ご回答ありがとうございます!

Deep Idle(スタンバイ)状態では、pmset schedule wakeorpoweron は動作しない場合があります。
特に MacBook Pro の深いスリープではタイマー復帰が制限されることがあります。

対処例
pmset -a standby 0
pmset -a autopoweroff 0
pmset -a powernap 1

それでも復帰しない場合、Deep Idle からの自動復帰はハード仕様で不可の可能性があります。
その場合は 浅いスリープを維持する設定にする必要があります。
@block blast

0Like

Your answer might help someone💌