■ SMFへのサービス登録 2010/03/05 更新
 Solaris10から採用されたサービス管理方法でサービス間の依存関係や起動順序、異常終了時の自動リカバリなど多くの機能を持つスグレものですが、従来のrcスクリプトと大きく変わっています。 設定の流れ、①起動、停止スクリプト作成 ②マニフェストファイルの作成 ③サービスへの登録 ④サービスの有効化 といった感じです。
 詳しくは、「Sun Solaris10 システム管理(基本編) サービス管理」 をご覧ください。
設定手順
  1. 起動・停止スクリプトの作成 (性質の似たサービスのスクリプトファイルを流用しました))
    # cd /lib/svc/method
    # vi proftpd
    緑:デフォルト、オレンジ:変更箇所
     
    #!/sbin/sh
    #
    #
    . /lib/svc/share/smf_include.sh ※1

    [ -f /etc/proftpd.conf ] || exit $SMF_EXIT_ERR_CONFIG ※1

    case "$1" in
     'start')
        /usr/local/proftpd/sbin/proftpd & ※2
        ;;

     'stop')
        pkill proftpd & ※3
        ;;

     'restart')
        $0 stop
        $0 start
        ;;

     *)
        echo "Usage: $0 { start | stop | restart }"
        exit 1
        ;;

    esac
    ※1 共通ライブラリのインクルード。 各種エラー処理などを行う。
    ※2 インストールした "ProFTPD" の実行ファイルを指定。
    ※3 プロセスの停止コマンド。 実行ファイル名の他、" pkill `cat /usr/local/proftpd/var/proftpd.pid` " でもOK。

     必要最小限のスクリプトです。 同じディレクトリのスタンドアロン型サービスを参考に編集してください。 このスクリプトは、次に作成するマニフェストファイルに記述し、svcadmコマンド実行時に呼び出されます。
     
  2. マニフェストファイルの作成 (こちらも、性質の似たサービスのマニフェストファイルを流用しました)
    # vi /var/svc/manifest/network/proftpd.xml
    緑:デフォルト、オレンジ:変更箇所
     
    <?xml version="1.0"?>
    <!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">

    <service_bundle type='manifest' name='ProFTPD'> ※1

    <service
        name='network/proftpd'
        type='service'
        version='1'>

        <create_default_instance enabled='false' /> ※2

        <single_instance />

        <dependency name='network' ※3
          grouping='require_any'
          restart_on='error'
          type='service'>
            <service_fmri value='svc:/network/service' />
        </dependency>

        <exec_method ※4
          type='method'
          name='start'
          exec='/lib/svc/method/proftpd start'
          timeout_seconds='30' />

        <exec_method ※4
          type='method'
          name='stop'
          exec='/lib/svc/method/proftpd stop'
          timeout_seconds='30' />

        <stability value='Unstable' />

    </service>

    </service_bundle>
    ※1 サービス名
    ※2 サービスの登録時に自動的に有効(起動)にするか、否か。
    ※3 "dependency" は依存関係の設定。(多分、/network/service に依存しているということかな)
    ※4 svcadmコマンドで enable/disable とした場合に実行されるスクリプトのパスを登録。
    詳細なことは良くわかりませんが、このファイルはサービスの情報や他のサービスとの依存関係、起動・停止処理などを記したものです。
    同じ性質の他のサービスのファイルをコピーして修正するのが無難でしょう。

    サービスによってマニフェストファイルの配置が異なるようです。
       /var/svc/manifest/network/********.xml
                   /application/********.xml
                   /device/********.xml
                   /milestone/********.xml
                   /platform/********.xml
                   /site/********.xml
                   /system//********.xml     こんな感じ。。
  3. SMFサービスへの登録、ついでに削除
    SMFへの登録
    # svccfg import /var/svc/manifest/network/proftpd.xml

    SMFから削除
    # svccfg delete svc:/network/proftpd
    修正する場合は、マニフェストファイルを変更し、delete & import が良いでしょう。
    直接変更する方法もありますが、設定とマニフェストファイルの内容がずれてくるのでお勧めできませんね。
     
  4. サービスの有効化&状態確認
    # svcadm enable svc:/network/proftpd ※1

    # svcs -l svc:/network/proftpd ※2
    fmri svc:/network/proftpd:default
    有効 true ※2-1
    状態 online ※2-2
    next_state none
    state_time 2010年01月27日 (水) 14時35分36秒
    logfile /var/svc/log/network-proftpd:default.log
    リスタータ svc:/system/svc/restarter:default
    contract_id 877
    dependency require_any/error svc:/network/service (online)
    ※1 指定したサービスの起動を行う。 停止する場合は "disable" とする。
    ※2 サービスの状態確認
    2-1 true であれば、起動制御を受ける。
    2-2 online ならサービス実行中。 maintenance の場合は依存するサービスが止まっている場合があるので要確認。
 

 ■ SMF関連コマンド 2010/03/05 更新
# svcadm enable svc:/network/proftpd ※1

# svcadm disable svc:/network/proftpd ※2

# svcadm restart svc:/network/proftpd ※3

# svcadm refresh svc:/network/proftpd ※4

# svcs -l svc:/network/proftpd ※5
※1 サービスの有効にし起動する。
※2 サービスの無効にし停止する。
※3 サービスを再起動する。
※4 サービスの設定を再度読み込む。
※5 サービスの状態を表示する。