MacOSXのスタートアップ

launchd

Debianならinitなど,Windowsならタスクマネージャでスタートアップの設定を行うけど,

MacOSXだとcronの機能を兼ね備えたlaunchdを使う.

launchdはdaemonとagent(ユーザごとのバックエンドサービス)を起動することが可能で,

それらの設定はxmlベースのplistに保存されている.

例としてユーザのログイン時に起動するplistを書いてみる.

plistファイル

"~/Library/LaunchAgent"下にtest.plistというファイルを作る.

本来はドメイン形式のファイル名にする事が望ましいらしいが,testということで.

  • test.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><!-- 1 -->
    <string>Test</string>

    <key>ProgramArguments</key><!-- 2 -->
    <array>
      <string>python</string>
      <string>/Users/yamaneko/test.py</string>
    </array>

    <key>OnDemand</key><!-- 3 -->
    <false/>
  </dict>
</plist>

という感じ.

1の箇所は名前.かぶらないようにファイル名と同じドメイン形式に本来はした方がよろし.

2は起動するプログラム.arrayタグの中のstringタグがコマンドラインの各argumentに相当する.

例の場合だと"pytnon /Users/yamaneko/test.py"のコマンドを実行するのと同じ.

また,ファイル名の方はフルパスで指定する.

3は起動時に呼び出すかどうか.呼び出すのでfalse

launchctl

書いたらターミナルからlaunchctlを使って読み込ませる.

今回の場合はログオフしてもいいんだけど,めんどくさいのでコマンドで済ませる.

$ launchctl load ~/Library/LaunchAgent/test.plist
$ launchctl list | grep Test
??? - Test

と上手くいけば表示される.クエスチョンマークはPIDに相当する.

$ ps aux | grep ???
hoge ??? 0.0 ....

ちなみに,なんかエラーがあるとハイフンの個所がエラーになって帰ってくる.

これで次回のログイン以降,このスタートアップシーケンスが追加される.

もっと

知りたかったらこの辺でも読んでください.