💤

Macで自動シャットダウンをスケジュールする

2023/11/01に公開

Macで、例えば夜12時に自動的にシャットダウンする方法。
Youtubeを遅くまで見ちゃって朝が辛いみたいなことがあったので、強制的にシャットダウンする方法を探しました。指定のコマンドを定期的に実行したい時に。

実施環境
項目 詳細
PC MacBook Pro(14 インチ、2021)Apple M1 Pro
OS MacOS Sonoma 14.1

結論 = launchd を使う

いろいろ試した結果、launchdを使った方法に落ち着きました。
以降は試した順にメモ。

❌ 省エネルギー>スケジュール

https://discussionsjapan.apple.com/thread/254861073

macOS VenturaにはそれまでのOSのシステム設定にあった”省エネルギー>スケジュール”による,曜日と時刻による自動的な起動,終了の項目がなくなりました。

ここにもあるように、Venturaより前のバージョンでは、Macの機能としてシャットダウンのスケジューリングがあったようなのですが、Ventura以降なくなっています。

🔺 pmset

https://support.apple.com/ja-jp/guide/mac-help/mchl40376151/mac

そのため、'省エネルギー>スケジュール'の代替としてpmsetというコマンドを使う方法があります(例:毎日0時にシャットダウンならsudo pmset repeat shutdown MTWRFSU 0:00:00など)。
ただこの方法だと、シャットダウン前に確認ダイアログが出てしまい、強制的にという私の要望には少し弱い…。

🔺 cron

https://qiita.com/tanomira/items/ab9bff5bd7fe0228f73b

次に試したのがcronだったのですが、これは何故かうまく行かない…単純なコマンドであれば実行できていたのですがシャットダウンだとうまくいかず…権限周りだと考えていろいろ試したものの断念。。
ただこれは私の知識/環境の問題で、仕様的にはがんばればいけそうな気がしたので🔺。

launchd

https://qiita.com/rsahara/items/7d37a4cb6c73329d4683

最終的に動いたのがlaunchdでした。
指定のフォルダ(フォルダの場所によって用途が違う)に.plistファイルを置き、$ launchctl load ファイル名(例えば$ launchctl load ~/Library/LaunchAgents/shutdown.plist)すると実行してくれます(解除は$ launchctl unload ~/Library/LaunchAgents/shutdown.plist)。
詳細は上記記事を参照いただければと思いますが、私の場合は~/Library/LaunchAgentsに以下shutdown.plistを配置しました。

~/Library/LaunchAgents/shutdown.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <!-- 名前 -->
    <key>Label</key>
    <string>shutdown</string>

    <!-- 実行したいスクリプト -->
    <key>ProgramArguments</key>
    <array>
      <string>/usr/bin/osascript</string>
      <string>-e</string>
      <string>tell app "System Events" to shut down</string>
    </array>

    <!-- カレンダー指定(例:毎日0時0分に実行) -->
    <key>StartCalendarInterval</key>
    <dict>
      <key>Minute</key>
      <integer>0</integer>
      <key>Hour</key>
      <integer>0</integer>
    </dict>
  </dict>
</plist>

他にも一定間隔で実行や、曜日の指定、リソース/処理時間の制限、ログの指定などなど複雑な指定も可能です。

まとめ

早く寝られるようになりました。

Discussion