Macでバックアップや定期作業を自動化したいとき、launchdかcronか迷いますよね。結論から言うと、重要な作業や複雑な自動化にはlaunchd、本当にシンプルな繰り返し作業だけならcronという選び方でOKです。特にMacがスリープから復帰したときも確実に実行したいなら、迷わずlaunchdを選んでください。
なぜAppleはlaunchdを推奨するようになったの?
AppleがmacOSでcronよりlaunchdを使うよう勧めるのには理由があります。launchdは単純に決まった時間に実行するだけじゃなく、ファイルの変更やネットワーク接続など、いろんな状況に反応できるんです。
例えば外付けハードディスクを繋いだら自動でバックアップを開始したり、特定のフォルダにファイルが追加されたらすぐに処理したり。cronは「毎日午後3時に実行」みたいな時間ベースでしか動きません。
もっと重要な違いはMacがスリープ状態のときの処理方法です。毎日深夜2時にバックアップする設定をしていて、その時間にMacBookがスリープ状態だったら?cronはそのまま飛ばしちゃいます。朝MacBookを開いてもバックアップは取れていません。でもlaunchdなら、Macが目覚めたらすぐに実行してくれるんです。
実際どんな場面でどっちを選ぶべき?
launchdを選ぶべき場面はこんなときです。大切なデータのバックアップみたいに絶対に見逃せない作業、サーバー監視やログ収集といったシステム管理作業、特定のイベントに反応する必要がある自動化作業などですね。
実行中の作業が重複して実行されたら困る場合もlaunchdが必要です。例えば大容量ファイルの処理がまだ終わってないのに次のスケジュール時間が来たとき、cronはまた実行しちゃいます。launchdならすでに実行中なら飛ばしてくれます。
cronが向いている場面は本当に単純な作業だけです。毎日決まった時間に簡単なスクリプトを実行する、Linuxサーバーと同じ環境に合わせる必要がある、Macが常に起動していて見逃した作業があまり重要じゃないときくらいですね。
バッテリー消費やシステム負荷はどうでしょう?正常な状況ではどちらもほとんど差はありません。ただしlaunchdで特定のサービスがエラーを起こして再起動を繰り返すと、一時的にバッテリー消費が増えることがあります。Activity Monitorでエネルギー使用量を確認すればわかります。
最初は複雑に見えてもlaunchdを選ぶ理由
launchdの設定はXMLファイル(plist)で書くから最初は難しく見えます。cronなら一行で済むのに。でもLingonやLaunchControlといったGUIツールを使えば簡単に設定できます。
長い目で見ればlaunchdを覚えておく方がずっと有利です。macOSが進化するにつれてcronのサポートはどんどん減っているんです。実際、Appleの公式ドキュメントでもcronは「レガシー互換性のために残してある」と明記されています。
作業が失敗したときの自動再起動機能も重要です。ネットワークが一時的に切れてクラウドバックアップが失敗したら?cronならそれで終わり。launchdなら設定次第で自動的にリトライしてくれます。
結局、Macで自動化をちゃんとやるならlaunchdを選ぶのが正解です。単純に見える作業も後で複雑になる可能性があるし、Macのスリープ機能を考えると見逃した作業の復旧は必須です。最初はちょっと複雑でも、一度覚えればずっと安定した強力な自動化環境が作れますよ。