Problem mit einem Service Script

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Payne_of_Death
Beiträge: 484
Registriert: 16.05.2004 20:21:30
Kontaktdaten:

Problem mit einem Service Script

Beitrag von Payne_of_Death » 30.08.2004 16:57:09

Hey,

nachfolgend habe ich ein Script welches für init.d gedacht ist. Das Script sucht an einer Stelle nach einer functions lib von init.d???????

Jedenfalls weiss ich nicht was hier richtig sein soll bzw. was ich angeben soll.

Vielleicht findet sich hier jemand zurecht.....

Code: Alles auswählen

#!/bin/bash
#
# Raymond 25DEC2003 support@bigriverinfotech.com
# /etc/rc.d/init.d/jabberd2
# init script for jabberd2 processes
# Tested under jabberd-2.0rc2 and Fedora 1.0 only
#
# processname: jabberd2
# description: jabberd2 is the next generation of the jabberd server
# chkconfig: 2345 85 15
#
if [ -f /etc/init.d/functions ]; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ]; then
. /etc/rc.d/init.d/functions
else
echo -e "\ajabberd2: unable to locate functions lib. Cannot continue."
exit -1
fi
#
progs="router resolver sm c2s s2s"
progsPath="/usr/local/bin"
confPath="/usr/local/etc/jabberd"
pidPath="/usr/local/var/jabberd/pid"
statusCol="echo -ne \\033[60G"
statusColorOK="echo -ne \\033[1;32m"
statusColorFailed="echo -ne \\033[1;31m"
statusColorNormal="echo -ne \\033[0;39m"
retval=0
#
StatusOK ( ) {
${statusCol}
echo -n "[  "
${statusColorOK}
echo -n "OK"
${statusColorNormal}
echo "  ]"
return 0
}
#
StatusFailed ( ) {
echo -ne "\a"
${statusCol}
echo -n "["
${statusColorFailed}
echo -n "FAILED"
${statusColorNormal}
echo "]"
return 0
}
#
ReqBins ( ) {
for prog in ${progs}; do
if [ ! -x ${progsPath}/${prog} ]; then
echo -n "jabberd2 binary [${prog}] not found."
StatusFailed
echo "Cannot continue."
return -1
fi
done
return 0
}
#
ReqConfs ( ) {
for prog in ${progs}; do
if [ ! -f ${confPath}/${prog}.xml ]; then
echo -n "jabberd2 configuration [${prog}.xml] not found."
StatusFailed
echo "Cannot continue."
return -1
fi
done
return 0
}
#
ReqDirs ( ) {
if [ ! -d ${pidPath} ]; then
echo -n "jabberd2 PID directory not found. Cannot continue."
StatusFailed
return -1
fi
return 0
}
#
Start ( ) {
for req in ReqBins ReqConfs ReqDirs; do
${req}
retval=$?
[ ${retval} == 0 ] || return ${retval}
done
echo "Initializing jabberd2 processes ..."
for prog in ${progs}; do
if [ $( pidof -s ${prog} ) ]; then
echo -ne "\tprocess [${prog}] already running"
StatusFailed
sleep 1
continue
fi
echo -ne "\tStarting ${prog}: "
if [ ${prog} == "router" ]; then
ports="5347"
elif [ ${prog} == "c2s" ]; then
ports="5222 5223"
elif [ ${prog} == "s2s" ]; then
ports="5269"
else
ports=""
fi
for port in ${ports}; do
if [ $( netstat --numeric-ports --listening --protocol=inet |
 gawk '{ print $4 }' |
gawk -F : '{ print $NF }' |
grep -c ${port}$ ) -ne "0" ]; then
StatusFailed
echo -e "\tPort ${port} is currently in use. Cannot continue"
echo -e "\tIs a Jabber 1.x server running?"
Stop
let retval=-1
break 2
fi
done
rm -f /var/lock/subsys/${prog}
rm -f ${pidPath}/${prog}.pid
args="-c ${confPath}/${prog}.xml"
${progsPath}/${prog} ${args} & 2> /dev/null
retval=$?
if [ ${retval} == 0 ]; then
StatusOK
touch /var/lock/subsys/${prog}
else
StatusFailed
Stop
let retval=-1
break
fi
sleep 1
done
return ${retval}
}
#
Stop ( ) {
echo "Terminating jabberd2 processes ..."
for prog in ${progs}; do
echo -ne "\tStopping ${prog}: "
killproc ${prog}
retval=$?
if [ ${retval} == 0 ]; then
rm -f /var/lock/subsys/${prog}
rm -f ${pidPath}/${prog}.pid
fi
echo
sleep 1
done
return ${retval}
}
#
case "$1" in
start)
Start
;;
stop)
Stop
;;
restart)
Stop
Start
;;
condrestart)
if [ -f /var/lock/subsys/${prog} ]; then
Stop
sleep 3
Start
fi
;;
*)
echo "Usage: $0 {start|stop|restart|condrestart}"
let retval=-1
esac
exit ${retval}
#
# eof
Die Fehlermeldung:

Code: Alles auswählen

jabberd2: unable to locate functions lib. Cannot continue.
Betreffender Teil sollte dieser sein:

Code: Alles auswählen

if [ -f /etc/init.d/functions ]; then 
. /etc/init.d/functions 
elif [ -f /etc/rc.d/init.d/functions ]; then 
. /etc/rc.d/init.d/functions 
else 
echo -e "\ajabberd2: unable to locate functions lib. Cannot continue." 
exit -1 
fi
Bin nicht der Unix Experte kann zwar programmieren aber bin mir im völligen unklaren was diese Zeilen bezwecken sollen. Externe Scripte anzapfen evtl....
Das System was mich zu Fall bringt muss erst mal geboren werden.

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Beitrag von roli » 30.08.2004 17:11:22

Hi,

ich habe zwar im Moment keine Zeit mir dein Script genauer anzusehen, aber setz mal in Zeile zwei deines Script's folgenden Befehl:

Code: Alles auswählen

set -x
Im Bash Manual steht folgendes:
-x After expanding each simple command, display the expanded value of PS4, followed by the command and its expanded arguments.
Damit sieh'st du was die Shell aus den Variablen und co. macht, bei mir steht dann oft Mist in einer Variable. Ich hoffe mal das dir der zusaetzliche Output hilft. Wenn ich was mehr Zeit habe, schaue ich mir dein Script aber nochmals genauer an.
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Benutzeravatar
Bert
Beiträge: 3751
Registriert: 16.07.2002 14:06:52
Wohnort: Dresden
Kontaktdaten:

Beitrag von Bert » 30.08.2004 17:15:41

Code: Alles auswählen

# Tested under jabberd-2.0rc2 and Fedora 1.0 only 
Sagt ja schon alles....
Ich kenn Fedora nicht, nehme aber an, das /etc/init.d/functions dort bestimmte Standardeinstellungen enthält / vornimmt. Mit dem code wird halt geschaut ob die Datei an 2 alternativen Stellen existiert und dann eingebunden. Da es das bei Debian nicht gibt, bricht das dann mit einem Fehler ab.

Ich hab im Moment auch kein Start/Stop Script. Pdreker hat aber mal was gebaut ;-) Vielleicht ließt er das hier und stellt es bereit?

Bert
Programmer: A biological machine designed to convert caffeine into code.
xmpp:bert@debianforum.de

Benutzeravatar
Payne_of_Death
Beiträge: 484
Registriert: 16.05.2004 20:21:30
Kontaktdaten:

Beitrag von Payne_of_Death » 30.08.2004 17:55:19

Das es was einbindet ist mir auch klar wohl wie du schon sagst Fedora spezifisch.
Als ich die Zeile ausdokumentiert hatte hab geht das Script zwar weiter allerdings werde hier eine ganze Reihe an Befehle gefunden dies es nicht gibt bei Debian.
Das System was mich zu Fall bringt muss erst mal geboren werden.

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Beitrag von roli » 30.08.2004 18:37:28

Hi,
Bert hat geschrieben:Ich hab im Moment auch kein Start/Stop Script. Pdreker hat aber mal was gebaut ;-) Vielleicht ließt er das hier und stellt es bereit?
auch wenn das das Problem nicht loest, eine in meinen Augen gute Vorlage habe ich unter http://www.linuxnetmag.com/de/issue9/m9daemon1.html gefunden.
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Benutzeravatar
Payne_of_Death
Beiträge: 484
Registriert: 16.05.2004 20:21:30
Kontaktdaten:

Beitrag von Payne_of_Death » 01.09.2004 01:20:55

roli hat geschrieben:Hi,
Bert hat geschrieben:Ich hab im Moment auch kein Start/Stop Script. Pdreker hat aber mal was gebaut ;-) Vielleicht ließt er das hier und stellt es bereit?
auch wenn das das Problem nicht loest, eine in meinen Augen gute Vorlage habe ich unter http://www.linuxnetmag.com/de/issue9/m9daemon1.html gefunden.
Die Vorlage ist Gold wert schön modular so haben wir das gern :wink:
Vielen Dank
Das System was mich zu Fall bringt muss erst mal geboren werden.

Antworten