1

mongodそこで、デーモン用の Arch Linux rc.d スクリプトを作成しました(に従って) が、実行すると:

sudo rc.d start mongod

立ち往生するだけです:

:: Starting /usr/bin/mongod          [BUSY]

「DONE」フェーズに移行することはありません。任意のヒント?

これが私のスクリプトです:

#!/bin/bash

# import predefined functions
. /etc/rc.conf
. /etc/rc.d/functions

# Point to the binary
DAEMON=/usr/bin/mongod

# Get the ARGS from the conf
. /etc/conf.d/crond

# Function to get the process id
PID=$(get_pid $DAEMON)

case "$1" in
   start)
    stat_busy "Starting $DAEMON"
    # Check the PID exists - and if it does (returns 0) - do no run
    [ -z "$PID" ] && $DAEMON $ARGS &> /dev/null
    if [ $? = 0 ]; then
        add_daemon $DAEMON
        stat_done
    else
        stat_fail
        exit 1
    fi
    ;;
   stop)
        stat_busy "Stopping $DAEMON"
    kill -HUP $PID &>/dev/null

    rm_daemon $DAEMON
    stat_done
    ;;
   restart)
        $0 stop
    sleep 1
    $0 start
    ;;
    *)
        echo "usage: $0 {start|stop|restart}"
esac

私はApacheがそれをどのように行うかを見てきましたが、彼らが何をしているのか理解できません。これが彼らのhttpdスクリプトの一部です:

case "$1" in
  start)
    stat_busy "Starting Apache Web Server"
    [ ! -d /var/run/httpd ] && install -d /var/run/httpd
    if $APACHECTL start >/dev/null ; then
      add_daemon $daemon_name
      stat_done
    else
      stat_fail
      exit 1
    fi
    ;;
4

1 に答える 1

1

1 つには、実際には定義されていない $ARGS 変数を渡しています。データベース、ログ ファイル、IP バインドなどの場所をデーモンに通知するために、いくつかの構成オプションを渡すか、-f または --config オプションを使用してmongodb.conf ファイルの場所を渡す必要があるでしょう。

mongod のデフォルトでは、データベースの場所が /data/db/ であると想定されています。これが存在しない場合、またはデーモンがその場所へのアクセス許可を持っていない場合、init スクリプトは失敗します。

おそらく、自分自身または root 以外のユーザー アカウントでデーモンを実行し (デフォルトの pacman パッケージは mongodb という名前のユーザーを作成します)、このユーザーにデータ パスとログ ファイルへの読み取り/書き込みアクセスを付与する必要があります。

[ -z "$PID" ] && /bin/su mongodb -c "/usr/bin/mongod --config /etc/mongodb.conf --fork" > /dev/null

Arch コミュニティ パッケージで提供されているmongodb init スクリプトを参照し、ここにあるものと比較することをお勧めします。または、pacman を使用して MongoDB をインストールすると、これらすべてが自動的に設定されます。

他のすべてが失敗した場合は、ifおよびelseブロック内にいくつかの「echo」コマンドを追加して、init スクリプトがハングしている場所を正確に追跡し、mongodb のログを確認して、私たちに報告してください。

于 2012-08-05T00:23:05.640 に答える