バン・ミアンの美味しい読書

僕の人生を変えてくれている本を紹介します。

Mac OSでスクリプトを自動実行するためにやったこと(メモ)

今日は少し内容が脱線しますが、メモとして残しておこうと思い書きました。

概要

1. 実行するスクリプトの用意

2. launchd.plistの作成と保存

3. launchd.plistの登録と取消

launchd.plistの作成

基本的な記述

例えば、sample.pyというpythonスクリプトを30秒ごとに実行したい時の記述。

<?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>py.sample.python</string>

<!-- script* -->
<key>ProgramArguments</key>
<array>
<string>python</string>
<string$HOME/hoge/hoge/sample.py</string>
</array>
<!-- launchctl loadしたタイミングで実行するか -->
<key>RunAtLoad</key>
<true/>

<!-- いつ実行するのか -->
<key>StartInterval</key>
<integer>30</integer>

<!-- ログ指定 -->
<key>StandardErrorPath</key>
<string>/Users/hoge/script/cron/err.log</string>
<key>StandardOutPath</key>
<string>/Users/hoge/script/cron/log.log</string>
</dict>
</plist>

コメントアウト中に*がある項目は必ず必要。
こちらのファイルを

~/Library/LaunchAgents/py.sample.python.plist

として保存します。

その他のオプション

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

Minute:分
Hour:時間
Day:日
Weekday:曜日(0と7は日曜日)
Month:月
で設定。

数字は適宜変更しましょう。

処理時間の制限

標準は20秒です。

<key>ExitTimeOut</key>
<integer>1200</integer>
ソフト制限, ハード制限
<key>SoftResourceLimits</key>
<dict>
    <key>CPU</key>
    <integer>1200</integer>
    <key>FileSize</key>
    <integer>1000000000</integer>
    <key>Data</key>
    <integer>1000000000</integer>
</dict>
<key>HardResourceLimits</key>
<dict>
    <key>CPU</key>
    <integer>1200</integer>
    <key>FileSize</key>
    <integer>1000000000</integer>
    <key>Data</key>
    <integer>1000000000</integer>
</dict>

こちらも、数字は適宜変更しましょう。

管理権限

管理権限はplistの保存する場所によって変わります。
基本的に一番上のもので大丈夫なような気がします。

ディレクト 概要
~/Library/LaunchAgents ユーザごとに実行するエージェントの格納ディレクト
/Library/LaunchAgents 管理者が管理するエージェントの格納ディレクト
/Library/LaunchDaemons 管理者が管理するデーモンの格納ディレクトリ(ログイン状態に依らない)
/System/Library/LaunchAgents OS が管理する各ユーザが実行するエージェントの格納ディレクトリ(触らない)
/System/Library/LaunchDaemons OS が管理するシステムが実行するデーモンの格納ディレクトリ(触らない)

launchd.plistの登録/編集/取消

登録
launchctl load ~/Library/LaunchAgents/py.sample.python.plist
編集
launchctl unload ~/Library/LaunchAgents/py.sample.python.plist
#編集を行う
launchctl load ~/Library/LaunchAgents/py.sample.python.plist
取消
launchctl unload ~/Library/LaunchAgents/py.sample.python.plist

編集は一度unloadしてから行いましょう。

その他オプション等もきになる方は調べてみてください。
以下、参考にさせていただいたサイトです。