Macで定期実行処理をする方法

cronではなくlaunchdを使うのがいいようです。

~/Library/LaunchAgents

com.aipo.example.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>
  <key>Label</key>
  <string>com.aipo.example</string>
  <key>RunAtLoad</key>
  <false/>
  <key>KeepAlive</key>
  <false/>
  <key>EnvironmentVariables</key>
  <dict>
    <key>PATH</key>
    <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
    <key>USERNAME</key>
    <string>yourname</string>
    <key>HOME</key>
    <string>/User/yourname</string>
    <key>NODE_PATH</key>
    <string>$HOME/Documents/lambda-local/node_modules</string>
    <key>AWS_ACCESS_KEY_ID</key>
    <string>yourKeyId</string>
    <key>AWS_SECRET_ACCESS_KEY</key>
    <string>yourKeyId</string>
  </dict>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/bin/lambda-local</string>
    <string>-l</string>
    <string>$HOME/Documents/index.js</string>
    <string>-h</string>
    <string>handler</string>
    <string>-e</string>
    <string>$HOME/Documents/lambda-local/event-samples/custom.js</string>
  </array>
  <key>StandardOutPath</key>
  <string>$HOME/Documents/log/lambda-local.log</string>
    <key>UserName</key>
    <string>$USERNAME</string>
  <key>StandardErrorPath</key>
  <string>$HOME/Documents/log/lambda-local-error.log</string>
    <key>UserName</key>
    <string>$USERNAME</string>
  <key>StartInterval</key>
  <integer>300</integer>
</dict>
</plist>

のような感じで記述します。

Label:ユニークなパッケージ名

RunAtLoad:自動起動

KeepAlive:(プロセスが落ちた際に)自動復旧

EnvironmentVariables:環境変数。ホームディレクトリとかを設定します。

ProgramArguments:スペース区切りのコマンドを1つずつ分けて書きます。

StandardOutPath:標準出力先

StandardErrorPath:エラー出力先

StartInterval:実行間隔(秒)

launchd に登録

launchctl load ~/Library/LaunchAgents/com.aipo.example.plist

設定変更時

再読込させます。

launchctl unload ~/Library/LaunchAgents/com.aipo.example.plist
launchctl load ~/Library/LaunchAgents/com.aipo.example.plist

起動

# 起動
launchctl start com.aipo.example

# 停止
launchctl stop com.aipo.example

参考

http://qiita.com/hidekuro/items/316abf8b359734227c88

http://qiita.com/kegamin/items/e035304e7295750cdf7d