Lighttpd自動起動(MacOSX)

start up Shell

MacOSXではLinuxのrcに相当するSystemStarterの機能を使ってlighttpdを自動起動します。ユーザインストールのサービスに関しては/Library/StartupItems/application_nameのディレクトリを作成しその配下に設定を記述します。ディレクトリ下にはapplication_nameと同じ名前の起動ファイル(通常は対象サービスを起動するシェル)とStartupParameters.plistという名前のファイルが必要です。(オプションでResources/言語名.lpoj/Localizable.settingsというローカライズ用のファイルを設置できます。)

まず、起動用のシェルを作成します。作法に則り/Library/startupItems/Lighttpd/Lighttpdとして作成します。

if [ -z $1 ] ; then
  echo "Usage: $0 [start|stop|restart] "
  exit 1
fi

# Source the common setup functions for startup scripts
test -r /etc/rc.common || exit 1
. /etc/rc.common

CONFIG="/etc/lighttpd/lighttpd.conf"
SCRIPT="/usr/local/sbin/lighttpd"

StartService () 
{
  if [ "${LIGHTTPD:=-NO-}" = "-YES-" ] ; then
    ConsoleMessage "Starting Lighttpd Server"
    $SCRIPT -f $CONFIG
  fi
}

StopService ()
{
  ConsoleMessage "Killing Lighttpd Server"
  kill `cat /var/run/lighttpd.pid` 
}

RestartService ()
{
  ConsoleMessage "Restarting Lighttpd server"
  /Library/StartupItems/Lighttpd/Lighttpd stop
  /Library/StartupItems/Lighttpd/Lighttpd start
}

if test -x $SCRIPT ; then
  RunService "$1"
else
  ConsoleMessage "Could not find lighttpd startup script!"
fi
StartupParameters.plist

続いて起動用パラメータリストStartupParameters.plist作成します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC 
  "-//Apple Computer//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  <plist version="1.0"><dict>
    <key>Description</key>
    <string>Lighttpd 1.4.11</string>
    <key>OrderPreference</key>
    <string>None</string>
    <key>Provides</key>
    <array>
      <string>Lighttpd</string>
    </array>
    <key>Uses</key>
    <array>
      <string>Network</string>
      <string>Resolver</string>
    </array>
  </dict></plist>

ここでプロパティの意味は次のようになります。起動しようとするサービスが他のサービスに依存する場合の起動順などを指定します。

  • Description 説明書き
  • OrderPreference 複数のプロセスの起動準備が整った時の起動順 [First|Early|None|Late|Last]
  • Provides 提供するサービスの名称(配列)
  • Uses 使用するサービスの名称(配列)

Usesに対してRequiresというプロパティもあります。Usesは使用するサービスが起動していなくても当該サービスを起動しますがRequiresを指定した場合は起動されません。

host config

ところで、/Library/StartupItems/~はシステムによって必ず実行されます。一時的に起動したくない場合などは/etc/hostconfigファイルに任意の変数名を記述しその値をスクリプト内で判定します。今回作成したスクリプトでは次の部分になります。

if [ "${LIGHTTPD:=-NO-}" = "-YES-" ] ; then

この部分は/etc/hostconfigに次の行を追加することで生きてきます。

LIGHTHTTPD=-YES-(-NO-)

[追記] lighttpd.confにserver.pid-fileの設定を忘れずに。デフォルトオフになっているので/Library/StartupItems/Lighttpd/Lighttpd stopで困ったことになります。

返信