Linux serviceコマンド

service コマンドの内容を確認してみました。 手元の環境 CentOs5.5 では /sbin/service にありました。 シェルスクリプトですので内容の確認は容易です。 スクリプトを表示してみたものが以下…

スポンサーリンク
#!/bin/sh

. /etc/init.d/functions

VERSION="`basename $0` ver. 0.91"
USAGE="Usage: `basename $0` < option > ¥
   | --status-all | [ service_name [ command ¥
   | --full-restart ] ]"
SERVICE=
SERVICEDIR="/etc/init.d"
OPTIONS=

if [ $# -eq 0 ]; then
  echo "${USAGE}" >&2
  exit 1
fi

cd /
while [ $# -gt 0 ]; do
case "${1}" in
  --help | -h | --h* )
    echo "${USAGE}" >&2
    exit 0
    ;;
  --version | -V )
    echo "${VERSION}" >&2
    exit 0
    ;;
  *)
    if [ -z "${SERVICE}" -a $# -eq 1 -a "${1}" ¥
       = "--status-all" ]; then
     cd ${SERVICEDIR}
     for SERVICE in * ; do
      case "${SERVICE}" in
       functions | halt | killall | single ¥
           | linuxconf| kudzu)
         ;;
       *)
        if ! is_ignored_file "${SERVICE}" ¥
          && [ -x "${SERVICEDIR}/${SERVICE}" ]; then
          env -i LANG="$LANG" PATH="$PATH" ¥
          TERM="$TERM" ¥
          "${SERVICEDIR}/${SERVICE}" status
        fi
        ;;
      esac
     done
     exit 0
    elif [ $# -eq 2 -a "${2}" = "--full-restart" ]; then
     SERVICE="${1}"
     if [ -x "${SERVICEDIR}/${SERVICE}" ]; then
      env -i LANG="$LANG" PATH="$PATH"" ¥
        TERM="$TERM"" ¥
        "${SERVICEDIR}/${SERVICE}" stop
      env -i LANG="$LANG" PATH="$PATH"" ¥
        TERM="$TERM"" ¥
        "${SERVICEDIR}/${SERVICE}" start
      exit $?
     fi
    elif [ -z "${SERVICE}" ]; then
     SERVICE="${1}"
    else
     OPTIONS="${OPTIONS} ${1}"
    fi
    shift
    ;;
  esac
done

if [ -x "${SERVICEDIR}/${SERVICE}" ]; then
  env -i LANG="$LANG" PATH="$PATH" ¥
    TERM="$TERM" ¥
    "${SERVICEDIR}/${SERVICE}" ${OPTIONS}
else
  echo $"${SERVICE}: unrecognized service" >&2
  exit 1
fi

オプションには --version--help が用意されています。 /etc/init.d/ 以下のディレクトリに用意したファイル名を引数に渡して実行するようになっています。 デーモン等を作成したら起動スクリプトを用意して 此処に配置すればいいことになります。 起動スクリプトには

  1. start
  2. stop
  3. status
などのメソッドが必要になることになります。

スポンサーリンク