plistを使ってforeverをデーモン化(OSX)
個人的な使い方として、forever
をMac上で使って永続化する事は(必要な時だけ起動するので)今のところそれほど無いのですが、使う事もあるかと調べてみました。
forever
自体が起動・停止・一覧表示機能を持っているので、launchctl
から扱う利点は、OS起動直後の起動や、ファイル・ディレクトリ監視での起動などでしょうか。(画像を特定ディレクトリに放り込んだら起動して、ファイル形式の変換や、エフェクトかけたりとかができるかも知れません)
という事で、始めます。
まずいくつか用意する情報があります。
node
のパスforever
のパス- 実行スクリプトのパス
- 管理の際の名称
上の3つはwhich
あたりで取得すればOKですね。
最後の1つは、サービスを一意に識別するための情報で、Androidアプリなどにも使われています。主に、以下のような形式になるようです。
jp.example.アプリ名
実際にlaunchctl list
してみると、
com.apple.fontd
com.oracle.java.Java-Updater
などとなっているのが分かると思います。
ここでは画像チャットを想定して、jp.zebevogue.imageChat
としました。
jp.zebevogue.imageChat.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>Disabled</key> <false/> <key>KeepAlive</key> <dict> <key>SuccessfulExit</key> <false/> </dict> <key>Label</key> <string>jp.zebevogue.imageChat</string> <key>ProgramArguments</key> <array> <string>/Users/zebevogue/.nvm/v0.10.15/bin/node</string> <string>/Users/zebevogue/.nvm/v0.10.15/bin/forever</string> <string>-a</string> <string>-l</string> <string>/Users/zebevogue/Sites/node-samples.new/image_chat_socket.io/app.log</string> <string>-e</string> <string>/Users/zebevogue/Sites/node-samples.new/image_chat_socket.io/app_error.log</string> <string>/Users/zebevogue/Sites/node-samples.new/image_chat_socket.io/index.js</string> </array> <key>RunAtLoad</key> <false/> <key>StartInterval</key> <integer>3600</integer> </dict> </plist>
foreverの各オプションについてはforever --help
してください。
このファイルを~/Library/LaunchAgents
にコピーし、以下のコマンドでロードします。
launchctl load ~/Library/LaunchAgents/jp.zebevogue.imageChat.plist
上手く動かない場合、実際に上記のProgramArguments
の文字列を実行してみてエラーがないか確認してみてください。
サービスの管理は以下のツールが便利かと思います。
Macで動いているサービス・デーモンを管理するソフトウェア2つ - ZeBeVogue別館