CentOS – TCL-Skript funktioniert von der Shell aus, schlägt aber in init.d fehl

CentOS – TCL-Skript funktioniert von der Shell aus, schlägt aber in init.d fehl

Ich habe ein TCL-Skript in CentOS 6.5, das ich problemlos als Root von der Shell aus ausführe. Aber wenn ich es als Dienst von init.d ausführe, schlägt es fehl. Hier ist das init.d-Skript:

#!/bin/bash
#
# camelot    Camelot 11.5.0
#

# Source function library.
. /etc/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
CAMELOT_LOGS=/var/camelot/logs
CAMELOT_LIB=/usr/local/camelot/lib
RETVAL=0
prog="camelot"
LOCKFILE=/var/lock/subsys/$prog

# Declare variables for service

start() {
    echo -n "Starting $prog: "
    /opt/camelot/register-phones.sh
    RETVAL=$?
    [ $RETVAL -eq 0 ] && touch $LOCKFILE
    echo
    return $RETVAL
}

stop() {
    echo -n "Shutting down $prog: "
    killall screen
    RETVAL=$?
    [ $RETVAL -eq 0 ] && rm -f $LOCKFILE
    echo
    return $RETVAL
}

status() {
    echo -n "Checking $prog status: "
    echo -n "Sorry, not implemented yet. run 'screen -r' to check on the process."
    RETVAL=$?
    return $RETVAL
}

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

Und hier ist die Fehlermeldung, die ich bekomme:

Starting camelot: camelot server at localhost:6060 is inaccessible
    while executing
"error "camelot server at $server:$port is inaccessible""
    (procedure "dorpc" line 122)
    invoked from within
"dorpc $server $port $outmsg"
    (procedure "createendpoint" line 7)
    invoked from within
"createendpoint $server $port 0 "$type $args@""
    (procedure "camelot::newendpoint" line 10)
    invoked from within
"camelot::newendpoint $CamelotServerIp $CamelotServerPort sipx SEP$ep2MAC"
    (procedure "registerPhone" line 22)
    invoked from within
"registerPhone $data"
    ("while" body line 3)
    invoked from within
"while {$data != ""} {
     # puts $data
     puts [registerPhone $data]
     gets $fp data
 }"
    (file "/opt/camelot/register-phones.sh" line 7)

Es scheint, als ob TCL dorpc nicht ausführen kann, aber dieser Port ist definitiv offen – ich kann das Skript direkt von der Shell aus ausführen, nachdem es hier fehlgeschlagen ist, und es funktioniert einwandfrei. Ich glaube, ich habe alle relevanten Umgebungsvariablen festgelegt, die ich von printenv als Root sehe (es tritt derselbe Fehler auf, ob die Umgebungsvariablen nun im init.d-Skript festgelegt sind oder nicht).

Gibt es etwas zu init.d und TCL, das ich übersehe?

Antwort1

Mein Freund hat mir dabei geholfen, das herauszufinden. Wir haben „bash -l -c“ verwendet, um eine vollständige Login-Shell für die Ausführung des TCL-Skripts zu erhalten, und das hier gefiel ihm anscheinend viel besser:

start() {
    echo -n "Starting $prog: "
    /bin/bash -l -c '/opt/camelot/register-phones.sh'
    RETVAL=$?
    [ $RETVAL -eq 0 ] && touch $LOCKFILE
    echo
    return $RETVAL
}

verwandte Informationen