Macを自動起動してcronを実行する

cron と Automator のどちらか利用すれば,Mac で定期的にジョブを実行できます.

どちらも Mac がスリープした状態ではジョブを実行できないため,自動起動・スリープを併用するといいようです.

環境

  • Mac mini Apple M1
  • macOS Sonoma 14.1.2

現在の設定を確認する方法

macOS では,crontab を用いて cron を設定できます.

現在設定されている cron を確認する場合は,以下のコマンドを利用します.

terminal

$ crontab -l

新しく設定を追加する方法

以下のコマンドで編集モードに入ります.

terminal

$ crontab -e

例として,10 分に一度,シェルスクリプトを記載したファイルを定期実行する場合は以下のようになります.

crontab

*/10 * * * * sh path/to/tmp.sh

下記のように書くと,上書きする形でログをファイルに出力します.

crontab

*/10 * * * * sh path/to/tmp.sh > path/to/tmp.log 2>&1

時間設定やコマンドの書き方は,以下のサイトを参考にしてください.

参考:crontab(5) - Linux manual page

ちなみに,crontab では指定の仕方が複数あり,ジョブを実行する権限で使い分けるようです.

参考:【違い】/etc/crontab と/var/spool/cron/[user] #cron - Qiita

電源設定

pmset コマンドを使うと,Mac の電源オン・オフを管理できます.

cron 実行のスケジュール前に起動するようにしておけば,Mac がスリープ状態でも実行できるようになります.

例として,毎日 18 時にスリープ状態を解除するには,以下のようにスケジュールをセットします.

terminal

$ sudo pmset repeat wake MTWRFSU 18:00:00

※MTWRFSU:月曜日から日曜日までを全て指定

ワイルドカードを使って柔軟に時刻を設定することはできないようです.

現在のスケジュールは,以下のコマンドで確認できます.

terminal

$ pmset -g sched

※以前のバージョンでは設定からスケジュールを指定できたようですが,インターフェイスの刷新に伴って機能が削除され,コマンドラインでの操作のみになったようです.

cron との連携

repeat で定例実行することはできますが,毎日1回が設定限度のため,それ以上細かいタイミングで設定する場合は cron を併用します.

pmset のスケジュールを1件設定し,起動後に次の起動スケジュールを設定しておけば,定期起動できます.

例:毎時 59 分 30 秒に起動する場合

repeat.sh

#!/bin/bash
time="$(date +"%m/%d/%y %H:59:30")"
sudo pmset schedule wake "${time}"

pmset でスケジュールを設定するには root 権限が必要になるため,root で cron を設定します.

terminal

$ sudo su
$ crontab -e

crontab

0 * * * * sh path/to/repeat.sh

参考:「ターミナル」で Mac をオン/オフにするスケジュールを設定する - Apple サポート (日本)