macOSのlaunchd
でスクリプトを定期実行する方法
macOSのlaunchd
は、特定の時間に自動でスクリプトを実行するために利用できる便利な機能です。今回は、毎朝3時15分にバックアップスクリプトを実行するためのplist
ファイルの例とその解説を紹介します。
必要なPATHをとおしたり標準出力、エラー出力の設定が便利です。
設定ファイル(plist
)の内容
まず、以下はlaunchd
用の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>
<!-- Labelは一意の識別子です。重複しないように適切な名前を指定してください -->
<key>Label</key>
<string>com.example.backup-task</string>
<!-- ProgramArgumentsは実行したいスクリプトのパスを指定します -->
<key>ProgramArguments</key>
<array>
<string>/Users/username/scripts/backup-task.sh</string>
</array>
<!-- EnvironmentVariablesで必要な環境変数を指定します。PATH変数を設定 -->
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin</string>
</dict>
<!-- RunAtLoadはシステム起動時にスクリプトを実行するかを指定します -->
<key>RunAtLoad</key>
<false/>
<!-- StandardOutPathとStandardErrorPathでログの出力先を指定します -->
<key>StandardOutPath</key>
<string>/tmp/backup-task.log</string>
<key>StandardErrorPath</key>
<string>/tmp/backup-task-error.log</string>
<!-- StartCalendarIntervalで実行タイミングを指定します。毎日3時15分に実行 -->
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>3</integer>
<key>Minute</key>
<integer>15</integer>
</dict>
</dict>
</plist>
設定ファイルの各部分の解説
Label
<key>Label</key>
には、このlaunchd
ジョブの一意な識別子を指定します。他のジョブと名前が重複しないように注意が必要です。この例ではcom.example.backup-task
を使っていますが、適切な名前に変更してください。
ProgramArguments
ここには実行するスクリプトの絶対パスを指定します。この例では/Users/username/scripts/backup-task.sh
となっていますが、実際のスクリプトのパスに置き換えてください。
EnvironmentVariables
launchd
はデフォルトでユーザの環境変数を引き継ぎません。そのため、必要に応じてPATH
などの環境変数を明示的に設定する必要があります。ここでは、一般的なPATH
を指定していますが、必要に応じてカスタマイズしてください。
RunAtLoad
システム起動時にスクリプトを実行したい場合は、このキーをtrue
に設定します。起動時の実行が不要な場合はfalse
に設定します。
StandardOutPathとStandardErrorPath
スクリプトの実行結果やエラーのログを指定されたファイルに出力します。これにより、スクリプトが正しく実行されているか、エラーが発生した場合に調査が容易になります。/tmp/
ディレクトリにログを出力するように設定していますが、適宜変更してください。
StartCalendarInterval
この部分で、実行タイミングを設定します。Hour
を3
、Minute
を15
に設定することで、毎朝3時15分にスクリプトが実行されるようにしています。希望の時間に変更してください。
設定ファイルを有効にする
- 上記の内容をテキストエディタで編集し、
~/Library/LaunchAgents/com.example.backup-task.plist
として保存します。名前は適宜変更可能です。 - 次に、以下のコマンドをターミナルで実行して、
launchd
にジョブを読み込ませます。
launchctl load ~/Library/LaunchAgents/com.example.backup-task.plist
これで、毎日指定した時間にスクリプトが自動的に実行されるようになります。ジョブを停止したい場合は、以下のコマンドでアンロードできます。
launchctl unload ~/Library/LaunchAgents/com.example.backup-task.plist
まとめ
launchd
を使うことで、定期的に実行したいスクリプトやタスクを簡単にスケジュールすることができます。環境変数の設定やログの出力設定など、細かいカスタマイズも可能なので、自分の環境に合わせて調整してください。