Help us understand the problem. What is going on with this article?

OSXでスクリプトを自動実行する方法

More than 3 years have passed since last update.

実行環境
OS:OS X EI Capitan(10.11.5)

1.Launchdとは

launchdはデーモン、アプリケーション、プロセス、スクリプトの起動・停止・管理を行う、オープンソースのサービス管理フレームワークである。

wikiより。Linuxでcronにあたるのかな。

2.サンプルのスクリプトを用意

まず、実行するサンプルのスクリプトを用意します。
今の時間をテキストファイルに保存してスクリプトです。

sample.script
#!/bin/bash

#日付をテキストファイルに保存
cd ~/Desktop
date >> sample.txt

3.launchd.plistを用意

実行するファイル名、実行するタイミングなどを記載した設定ファイルを用意します。以下サンプルです。

sample.time.record.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>sample.time.record</string>
  <!--フルパスで指定-->
 <key>ProgramArguments</key>
   <array>
     <string>/Users/username/Desktop/sample.sh</
string>
   </array>
 <key>StartInterval</key>
   <integer>60</integer>
 <key>RunAtLoad</key>
   <true/>
 <key>ExitTimeout</key>
   <integer>300</integer>
</dict>
</plist>

keyについては以下を参考にしました。
http://tweeeety.hateblo.jp/entry/2015/01/06/215425

key名 説明
Label launchd のジョブの名前。慣例?でファイル名もLabel.plistという名前がいいぽい
ProgramArguments 実行するプログラムとオプションや引数をarrayノードで指定
RunAtLoad trueの場合はlaunchd に launchd.plist がロードされたタイミングで起動
StandardOutPath 標準出力ログの場所。指定がないと/var/log/system.log
StandardErrorPath 標準エラーログの場所。
StartCalendarInterval 実行日時のカレンダー指定
StartInterval カレンダー指定ではなくインターバル指定したいときはこちらを使用

3.launchdへの定期実行の登録/取消と確認

設定ファイルができたら、以下の手順で設定ファイルを反映させます。

①作成しいたファイルを以下のディレクトリに保存
~/Library/LaunchAgents/

②Terminalで作成したファイルを読込
$ launchctl load sample.time.record.plist

③ちゃんと実行されているか確認
$ lauchctl list | grep 'sample'

テキストファイルに1分ごとに時間が記録されていたら成功です。
$ cat ~/Desktop/sample.txt

スケジュールを止めるときはunloadします
$ launchctl unload sample.time.record.plist

設定ファイルを更新した場合は、一度unloadして、再度loadしてください。

参考URL

tadaken3
とある会社のデータアナリスト「ラクして成果を上げる仕組みを考える」をモットーにPython、Google Apps Scriptについてのブログを書いています。趣味は自転車、筋トレ、登山です。 趣味と実益を兼ねて片道30分の自転車通勤してます。
http://tadaken3.hatenablog.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away