デーモンの自動起動

 前節のように,コマンドラインから/usr/libexec/slapdを実行すれば,デーモンが起動しますが,
コンピュータを起動するたびに手動で実行するのは面倒です.また,デーモンを停止するときに,PIDを
調べてkillするというのも手がかかります.そこで,デーモンの起動を自動化し,また終了も簡単に
できるようにします.

 Linux等ではこのような機能は,init.dなどを用いますが,MacOS Xの場合は若干扱い方が異なります.
まず,rootになり/Library/StartupItemsに移動します.

mycomputer:~ myuser$ sudo su
Password:
mycomputer:/Users/myuser root# cd /Library/StartupItems/
mycomputer:/Library/StartupItems root#
このディレクトリ以下にはOS起動時にスタートさせるサービスごとにディレクトリが作られており,さらに
それぞれのディレクトリ以下に起動用のスクリプトや起動の設定に関するプロパティリストが含まれます.
各ファイルの役割等は色々なページで説明されているので,とりあえずLDAPディレクトリを作成して,
その中に,LDAP,StartupParameters.plistの二つのファイルを作成します.
mycomputer:/Library/StartupItems root# mkdir LDAP
mycomputer:/Library/StartupItems root# cd LDAP
mycomputer:/Library/StartupItems/LDAP root# cat LDAP 
#!/bin/sh

. /etc/rc.common

StartService ()
{
        ConsoleMessage "Starting OpenLDAP Standalone Daemon"
        /usr/libexec/slapd
}

StopService ()
{
        ConsoleMessage "Stopping OpenLDAP Standalone Daemon"
        if [ -f /var/run/slapd.pid ]
        then
                PID=$(cat /var/run/slapd.pid)
                kill -TERM $PID
        else
                ConsoleMessage "/var/run/slapd.pid does not exist."
        fi
}

RestartService ()
{
        ConsoleMessage "Restarting OpenLDAP Standalone Daemon"
        StopService
        StartService
}

RunService "$1"

mycomputer:/Library/StartupItems/LDAP root# cat StartupParameters.plist 
{
  Description     = "OpenLDAP Standalone Daemon";
  Provides        = ("OpenLDAP");
}
mycomputer:/Library/StartupItems/LDAP root# 
 LDAPファイルはシェルスクリプトとして実行される必要があるため,パーミッションを
次のように設定しておきます.
mycomputer:/Library/StartupItems/LDAP root# chmod 744 LDAP 
mycomputer:/Library/StartupItems/LDAP root# ls -l
total 16
-rwxr--r--   1 root  wheel  471 Dec 23 00:34 LDAP
-rw-r--r--   1 root  wheel   88 Dec 23 00:16 StartupParameters.plist
mycomputer:/Library/StartupItems/LDAP root# 
 LDAPファイルは実際にデーモンを起動したり停止したりする時のスクリプトになります.停止には,
slapd.confで設定したように/var/run/slapd.pidファイルのプロセス番号を使用します.LDAPファイル
からslapd.confを参照する形にはしていませんので,必ずslapd.confのPIDファイルの指定とLDAP
ファイルのPIDファイルの位置を対応させます.もう一方のStartupParameters.plistは起動の順番等を
指定するなどで使われます.

 ファイルが作成できたら,LDAPファイルで起動や停止ができるかをチェックしましょう.

mycomputer:/Library/StartupItems/LDAP root# ./LDAP start
Starting OpenLDAP Standalone Daemon
mycomputer:/Library/StartupItems/LDAP root# netstat -an|grep 389
tcp4       0      0  *.389                  *.*                    LISTEN
tcp6       0      0  *.389                  *.*                    LISTEN
mycomputer:/Library/StartupItems/LDAP root# ./LDAP restart
Restarting OpenLDAP Standalone Daemon
Stopping OpenLDAP Standalone Daemon
Starting OpenLDAP Standalone Daemon
mycomputer:/Library/StartupItems/LDAP root# netstat -an|grep 389
tcp4       0      0  *.389                  *.*                    LISTEN
tcp6       0      0  *.389                  *.*                    LISTEN
mycomputer:/Library/StartupItems/LDAP root# ./LDAP stop
Stopping OpenLDAP Standalone Daemon
mycomputer:/Library/StartupItems/LDAP root# netstat -an|grep 389
mycomputer:/Library/StartupItems/LDAP root# 
 無事にスクリプトが動きましたら,コンピュータを再起動させて自動的にslapdが立ち上がっているか
チェックしてみましょう.今回作成したファイル類は,所有者がrootでグループがwheelでないと
OS起動時にはじかれてしまいます.上手く起動できていない場合は,コンソール.appを使用して
system.log等にエラーメッセージが出てないかを確認してみます.


back