PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mongodb - Problem mit start-script



Stauder
28.06.11, 15:32
Hi,

ich benutze ein Debian Lenny und habe darauf die mongodb installiert (vermutlich kennen die nicht viele - ist eine Datenbank ohne SQL).

Die Anleitung für Debian stand auch direkt auf der Seite: http://www.mongodb.org/display/DOCSDE/Installationsanleitung+Linux-Debian und die habe ich genau so befolgt.

Allerdings startet das System beim booten die mongodb nicht. Wenn ich das Script manuell in der Shell starte ("./etc/init.d/mongodb start") erhalte ich als Antwort: Usage: \$0 {start|stop|status|restart|reload} - scheint also den Parameter nicht auszuwerten.

Manuell kann ich die mongodb starten und benutzen (wenn ich den Parameter dbpath mitangebe). Ich würds aber halt gern automatisch starten.

Ich habe nun selbst nicht genügend Ahnung von Linux um es startklar zu machen. Und hoffe auf eure Hilfe :)

Ich sage schon mal danke.

kreol
28.06.11, 16:47
Wenn Du es direkt aufrufst brauchst Du den führenden . nicht. Nur
/etc/init.d/mongodb startreicht. So steht es auch in Deinem HowTo.

Was sagt denn ein
ls -l /etc/init.d/mong*und ein
ls /etc/rc2.dUnd schicke auch mal Dein Script komplett hierher, das hört sich verdächtig nach Typo an.

Bei herposten der erbetenen Ausgaben und Dateien verwende bitte code-Tags, siehe meine Sig.

Kreol

Stauder
29.06.11, 07:47
Hi,

also hier die Angaben:

Nach dem update-rc.d:

# update-rc.d mongodb defaults
Adding system startup for /etc/init.d/mongodb ...
/etc/rc0.d/K20mongodb -> ../init.d/mongodb
/etc/rc1.d/K20mongodb -> ../init.d/mongodb
/etc/rc6.d/K20mongodb -> ../init.d/mongodb
/etc/rc2.d/S20mongodb -> ../init.d/mongodb
/etc/rc3.d/S20mongodb -> ../init.d/mongodb
/etc/rc4.d/S20mongodb -> ../init.d/mongodb
/etc/rc5.d/S20mongodb -> ../init.d/mongodb



ls -l /etc/init.d/mong*
-rwxr-xr-x 1 root root 1711 29. Jun 06:32 /etc/init.d/mongodb


ls /etc/rc2.d
S20mongodb
(und einige andere)

Das komplette Script:

#! /bin/sh
# start / stop script for mongodb

### BEGIN INIT INFO
# Provides: mongod
# Required-Start: \$remote_fs \$syslog
# Required-Stop: \$remote_fs \$syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start mongod at boot time
# Description: Enable service provided by mongod.
### END INIT INFO

# Source function library.
. /lib/lsb/init-functions

retval=0
pidfile=/var/run/mongodb.pid

exec="/opt/mongodb/bin/mongod"
prog="mongod"
config="/etc/mongodb/mongodb.conf"
lockfile="/var/lock/mongod"

[ -e \$config ] && . \$config

start() {
if [ ! -x \$exec ]
then
echo \$exec not found
exit 5
fi

log_daemon_msg "Starting mongoDB daemon"
log_progress_msg \$prog

start-stop-daemon --start --pidfile \$pidfile -m -c \$MONGO_USER \
--exec \$exec -- \$MONGO_OPTS run > /dev/null 2>&1 &
retval=$?

if [ \$retval -eq 0 ]
then
log_end_msg 0
else
log_end_msg 1
fi
return \$retval
}

stop() {
log_daemon_msg "Stopping mongoDB daemon"
log_progress_msg \$prog
start-stop-daemon --stop --pidfile \$pidfile --retry 10 \
--exec \$exec

retval=$?

if [ \$retval -eq 0 ] && rm -f \$lockfile
then
log_end_msg 0
else
log_end_msg 1
fi
rm -f \$pidfile
return \$retval
}

restart() {
stop
start
}

reload() {
restart
}

# See how we were called.
case "\$1" in
start)
\$1
;;
stop)
\$1
;;
restart)
\$1
;;
reload)
\$1
;;
*)
echo "Usage: \$0 {start|stop|status|restart|reload}"
exit 2
esac

exit \$?


Und die dazugehörige config:

# /etc/mongodb# cat mongodb.conf
MONGO_USER="mongod"
MONGO_OPTS="--dbpath /data/mongodb/"


Wie gesagt, der startet nicht beim booten und das Script wirft bei manuellem Aufruf auch nur die Usage raus:

/etc/init.d/mongodb start
Usage: $0 {start|stop|status|restart|reload}

Starten kann ich sie nur über

/opt/mongodb/bin# ./mongod --dbpath /data/mongodb/

Falls noch Infos fehlen sollten, liefere ich sie gern nach :)

DrunkenFreak
29.06.11, 16:59
# See how we were called.
case "\$1" in
start)
\$1
;;
stop)
\$1
;;
restart)
\$1
;;
reload)
\$1
;;
*)
echo "Usage: \$0 {start|stop|status|restart|reload}"
exit 2
esac
exit \$?


Das sieht für mich sehr ungewöhnlich aus. Normalerweise sollte da sowas stehen:


case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
reload)
reload
;;
*)
echo "Usage: $0 {start|stop|status|restart|reload}"
exit 2
esac

"\" wird normalerweise als Escapezeichen genutzt. Das dahinterstehende Zeichen wird damit nicht mehr von der Shell interpretiert, sondern so ausgegeben. Er erwartet also "\$1" als Eingabe und nicht mehr start.

nopes
29.06.11, 17:29
...
Starten kann ich sie nur über

/opt/mongodb/bin# ./mongod --dbpath /data/mongodb/...
Neben den gerade angekreideten "\", frage dich was steht in "\$MONGO_OPTS", dort fehlt vermutlich "--dbpath /data/mongodb/", ggf. mal irgendwo ein
echo \$MONGO_OPTS bzw. wohl eher
echo $MONGO_OPTS einbauen und schauen was ausgegeben wird...

Stauder
30.06.11, 07:41
Hi,


"\" wird normalerweise als Escapezeichen genutzt. Das dahinterstehende Zeichen wird damit nicht mehr von der Shell interpretiert, sondern so ausgegeben. Er erwartet also "\$1" als Eingabe und nicht mehr start.

danke - das hat zumindest schon mal den obigen Fehler behoben, so dass er nun das Sprungziel findet und versucht die MongoDB zu starten:

Starting mongoDB daemon: mongod.
Leider ohne Erfolg, wie ein

ps -A
zeigt. Auch das stoppen der MongoDB über das Script gibt einen Fehler, da kein Prozess gestartet wurde...

Leider kommt es beim Starten zu keiner Fehlermeldung.


Neben den gerade angekreideten "\", frage dich was steht in "\$MONGO_OPTS", dort fehlt vermutlich "--dbpath /data/mongodb/", ggf. mal irgendwo ein
echo \$MONGO_OPTS bzw. wohl eher
echo $MONGO_OPTS einbauen und schauen was ausgegeben wird...
Das steht in der config-Datei. Die wird auch geladen (Inhalt steht weiter oben im 3. Post). Das passt auch, hab es mit dem echo schon probiert.


Danke schon mal soweit für eure Hilfe. Der oben genannte Fehler ist nun zwar behoben, aber starten tut das Teil immer noch nicht :(


Gruß,
Stauder

Stauder
30.06.11, 07:50
Okay,

ich habs! Ich habe einfach mal das start-stop-daemon manuell ausgeführt (und die Variablen natürlich ersetzt). Es gab einen Fehler mit den Files ".pid", ".lock" (keine Permission, beide gelöscht) und einem ungültigen Datenbank-Schema (auch gelöscht).

Nun funktioniert alles.

Danke für eure Hilfe!