Macで自動起動やシャットダウンをスケジュールしたい!!
そして、毎日必要なプログラムを自動実行させたい!!
今日はその方法をお伝えします。
なんで「プログラムを定期的に自動実行したい!」なんて思ったのか
こんなことを思った背景は、毎日のとある作業がめんどくさかったからです。
僕はこの通り、ブログを運営しているのですが、
ブログ運営では「Google search console」というツールで自分の記事が検索結果の何位に表示されて、何回表示されたか、何回クリックされたかを確認しつつ、記事をリライトしていくのかとても重要です。
なので僕も、自分が書いた記事の検索順位や表示回数を毎日チェックしていたのですが。。。
以下の画像を見てください。

正直、この中から目当てのURLを探してチェックするの、かなりだるくないですか?
毎日電車の中とかで見てましたが、もうストレスが溜まる!笑
とここで、「今の僕はプログラマーだし、ChatGPTがあれば決めたURLの必要情報を、毎日メールで自動配信できるんじゃね?」と閃いてしまったわけです。
ということで、そこから僕はたった2日間、会社から帰った夜に作業することで求めた機能を作ってしまったわけです。
そうして作ったプログラムは下記の記事で紹介しているので、ブロガーさんはぜひ確認して見てください!
今回の本題は、Macで自動起動をスケジュールし、プログラムを定期的に自動実行する流れです。
ではいこう!
Macで自動起動をスケジュールし、プログラムを定期的に自動実行する流れ
今回実現したのは、以下の流れ。
- 指定した時間になったらMacを自動起動
- Mac起動後、プログラムを実行して求める作業をさせる
Macの起動と、プログラムの実行。この2つを指定した時間に自動実行させよう、というのが今回のミッションでした。
macOS Ventura以降では、設定アプリからスケジュール機能がなくなったため、シャットダウンや再起動、スリープをスケジュールするにはターミナルアプリでコマンドを使用する必要があります。
なんでや、、とは思いますが、コマンドは簡単だしすぐに元に戻せて、Macが変になるようなものでもないので、まあ受け入れましょう。
以降では、ターミナルを使ってMacの自動起動やシャットダウン、そしてその後のプログラム自動実行をスケジュールする方法を詳しく説明していきます。
ターミナルを使用して自動起動のスケジュールを設定する方法
まずはMacを指定した時間に起動するように設定する方法です。
以下がその流れ。
「ターミナル」アプリを起動する
まずはMacの「Spotlight」で「ターミナル」と検索するなどして、「ターミナル」アプリを起動します。
Spotlightは、Macのキーボードの”F4″の位置にある「
」マークを押せば即起動できます。下記画像のやつですね。

そこに「ターミナル」と入力して出てくる、以下の画像のようなアプリが「ターミナル」アプリです。
これを起動します。

自動起動をスケジュールする(必要なら他のアクションも指定可能)
ターミナルが起動したら、ここからコマンドを入力して自動起動をスケジュールしていきます。
コマンドと聞くと急に不安になる方も多いと思いますが、超簡単なコマンドだけで設定できるので大丈夫。
スケジュール設定には、「pmset」というコマンドを使用します。
これは、Macの起動や終了を指定した時間や日付にスケジュールできるコマンドで、構文は以下です。
sudo pmset repeat <行うアクション> <曜日> <時刻>
<行うアクション>、<曜日>、<時刻>は各自で差し替えてください。
差し替え候補は以下のとおり。
パラメータ | 説明 | 設定例 |
---|---|---|
<行うアクション> | wakeorpoweron (スリープ解除と電源ON)sleep (スリープ)shutdown (シャットダウン)restart (再起動) | wakeorpoweron(スリープ解除と電源ON) |
<曜日> | 月火水木金土日(MTWRFSU) | MTWRFSU(毎日実行したい) |
<時刻> | 24時間形式 HH:MM:SS | 06:55:00(6時55分) |
「pmset」コマンドを入力する
今回僕がやりたいのは、Macを指定した時間に起動することなので、ターミナルの以下画像の部分に、下記のコマンドをコピーペーストします。
sudo pmset repeat wakeorpoweron MTWRFSU 06:55:00
- 意味:毎日6:55にスリープ解除または電源オン。

入力したら、「enter」キーでコマンドを実行します。
パスワードの入力を求められるので、Macのロック解除の時のパスワードを入力して、再度「enter」キーを押せば設定が反映されます。
スケジュールが設定されたことを確認する
スケジュールがちゃんと設定されたか確認しましょう。以下のコマンドを入力して「enter」キーです。
pmset -g sched
このコマンドを実行すると、設定されているすべてのスケジュールが表示されます。
以下のような結果が帰ってくれば、正しく設定されています。
Repeating power events:
wakepoweron at 7:00AM every day
【参考】スケジュールを削除する
設定したスケジュールを削除したい時は、以下のコマンドで削除ができます。
sudo pmset schedule cancel <行うアクション>
【参考】 既存の設定を変更したい場合
pmset
は同じイベントを上書きできないため、一度削除してから再設定が必要です。
以下のコマンドで、既存のスケジュールが全部削除されます。
sudo pmset repeat cancel
ここで設定済みのスケジュールを確認するpmset -g sched
を実行すると「No scheduled events」と表示されるはず。
スケジュールの削除が済んで、例えば起動時間を毎朝5:30にしたいのであれば、再度以下のコマンドを実行すれば設定ができます。
sudo pmset repeat wakeorpoweron MTWRFSU 05:30:00
Macの自動起動などのスケジュールはこれで完了
ということで、ここまでの流れでMacを指定した時間に自動起動などをするようにスケジュールできました。
ここからは、スケジュールに沿って起動したMacに、これまた指定した時間にプログラムを実行してもらう設定をしていきます。
時間を指定してプログラムを自動で実行する方法
やることは以下のとおり。
- 実行したいプログラムを書く
- ターミナルアプリを起動し、nanoエディターでcronを起動する
- cronにプログラムの自動実行コードを記載する
- 記載内容を保存する
- 記載した内容が保存されているか確認する
nanoとcronは初めて聞いた人が多いと思いますが、以下のように考えればOKです。
- cron
→プログラムの自動実行を記載しておくメモ帳。Macはここを読んでプログラムを自動実行する - nano
→cronへの記載時の書き方。何種類か書き方があるが、一番わかりやすいのがnano。
実行したいプログラムを書く
まずは定期実行したい処理を書いたプログラムをっ作成する必要があります。
ここは各自で何を実行したいかによるので、今回の記事では特に言及しません。
僕が作ったプログラムは以下の記事で解説しているので、参考にしたい方は確認してみてください。
ターミナルアプリを起動し、nanoエディターでcronを起動する
ここから知らない単語が出てきました。
- cron
→プログラムの自動実行を記載しておくメモ帳。Macはここを読んでプログラムを自動実行する - nano
→cronへの記載時の書き方。何種類か書き方があるが、一番わかりやすいのがnano。
でイメージをしてみてください。理解する必要はありません。
cronというメモ帳にプログラムの自動実行を書き込み、その書き込みに使う書き方がnanoということだけ理解していれば大丈夫です。
ここから先は、cronへの書き方がnano以外だと操作が全て異なってくるので、コマンド操作なんかよくわからん!という方はとりあえずここの手順に従っておいてください。
操作方法わかるよって人は、この手順は飛ばしてもOKです。
ターミナルで次のコマンドを実行します。
すると、一時的にnanoエディターでcronを起動できます。
export EDITOR=/usr/bin/nano
cronにプログラムの自動実行コードを記載する
そしたら、以下のコマンドを実行してcronを起動します。
crontab -e
ぱっと見た感じでは違いがわからないかもしれませんが、以下のように、ウィンドウの下にコマンド一覧が並んでいればcronが起動しています。

そしたら、特定のタイミングでプログラムを実行するコマンドをcronに書き込みます。
コマンドの構文は以下のとおり。
分 時 日 月 曜日 コマンド
0 7 * * * /<Python実行環境のパス> /<やりたい処理のパス> >> /<ログファイルの出力パス> 2>&1
※「*」は毎日、毎月、毎曜日、という意味
※↑は毎日7時に<Python実行環境のパス>の実行環境で、<やりたい処理のパス> という処理を行い、<ログファイルの出力パス>にログを出力する、という意味です
実際には以下の感じのコマンドになると思います。
0 7 * * * /Users/hogehoge/anaconda3/bin/python3 /Users/hogehoge/Python/app.py >> /Users/hogehode/Python/cron_log.txt 2>&1
記載内容を保存する
コマンドが記載できたら、以下のキー操作でcronの記載内容を保存して、cronを閉じましょう。
Ctrl + O(オー)
→ Enter (保存)Ctrl + X
(終了)
参考までに、以下がnano
で基本のキー操作です
操作 | コマンド | 説明 |
---|---|---|
保存 | Ctrl + o (オー) → Enter | 編集内容を保存。 |
終了 | Ctrl + X | エディタを終了。 |
カーソル移動 | 矢印キー | カーソル移動。 |
行削除 | Ctrl + K | カーソル行を削除。 |
検索 | Ctrl + W | 指定した文字列を検索。 |
記載した内容が保存されているか確認する
ここまでで、cronにプログラムの自動実行を設定することができました。
以下のコマンドはcronに書かれている内容を表示するものです。これでちゃんと設定がされているか確認できます。
crontab -l
上記コマンドを実行して、以下のような文字が返ってくればOKです。
要するに、さっきcronに書いた文字列が返ってくればOKというわけですね。
0 7 * * * /Users/hogehoge/anaconda3/bin/python3 /Users/hogehoge/Python/app.py >> /Users/hogehode/Python/cron_log.txt 2>&1
これで、あとは設定した時間になればMacのスリープモードが解除され、プログラムが実行されるはずです。
【参考】恒久的にnanoをデフォルトエディタに設定
ちなみに、今回はcronを使うにあたり一時的にnanoで開きましたが、ほとんどの人にとっては今後基本的にnanoでcronが起動する方が良いはずです。
以下の手順で、恒久的にnanoを使うように設定しておきましょう。
~/.zshrc
を実行
nano ~/.zshrc
- 最終行に以下を
export EDITOR=/usr/bin/nano
- 設定を再読み込み
source ~/.zshrc
これで、今後crontab -e
を実行すると、必ずnano
が使われるようになります!
まとめ
macOS Ventura以降では、シャットダウンや再起動、スリープのスケジュール設定をターミナルで行う必要があります。
ターミナルを使用した設定は少し技術的ですが、実は簡単に設定可能です。
Macの自動起動、プログラムの自動実行ができると、いろんなことが一気に自動化できるので、ぜひこれらの機能を活用してみてください。