2 votes

Démarrage de Chandler script /bin/bash vs /bin/sh

J'ai une installation Chandler qui a bien fonctionné pendant plusieurs mois, mais récemment, lorsque j'ai voulu me connecter au serveur, j'ai remarqué qu'il ne fonctionnait pas.

SSHing dans, a confirmé qu'il n'est pas en cours d'exécution, alors je vais manuellement redémarrer via mon chandler de démarrage script ( /etc/init.d/chandler ) qui a fonctionné parfaitement pendant des mois et des mois à travers divers redémarrages, etc. et j'obtiens l'erreur suivante :

/chandler/bin/osafsrvctl: 24: Syntax error: "(" unexpected

Maintenant, si je vais directement à /chandler/bin/osafsrvctl et exécutez ce qui suit en tant que root /chandler/bin/osafsrvctl start il démarre sans erreur.

Quelques recherches en ligne m'ont conduit à croire que cela a quelque chose à voir avec Chandler qui a besoin de /bin/bash pour démarrer correctement, car le script de démarrage est Bash. Bien. Vérifiez le /chandler/bin/osafsrvctl et il utilise effectivement /bin/bash . Changer le startup init.d script pour utiliser également /bin/bash n'a rien fait, j'obtiens la même erreur. Voici le /etc/init.d/chandler script qui génère l'erreur :

#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          chandler
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop chandler server
### END INIT INFO
#
# chandler              This init.d script is used to start chandler.
#                       It basically just calls osafsrvctl.

# set environment variables
. /etc/default/chandler

# set local variables
RETVAL=$?
CHANDLER_HOME="/chandler"

# check input
case "$1" in
    start)
        if [ -f $CHANDLER_HOME/bin/osafsrvctl ];
            then
                /bin/su chandler $CHANDLER_HOME/bin/osafsrvctl start
        fi
        ;;
    stop)
        if [ -f $CHANDLER_HOME/bin/osafsrvctl ];
            then
                /bin/su chandler $CHANDLER_HOME/bin/osafsrvctl stop
        fi
        ;;
    *)
        echo "Usage: /etc/init.d/osafsrvctl {start|stop}"
        exit 1
        ;;
esac

exit $RETVAL

Gardez à l'esprit que ce qui précède fonctionnait bien jusqu'à un moment où ce n'était plus le cas - je n'ai aucune idée de ce qui a changé et pourquoi il en est ainsi maintenant.

Des idées ?

0voto

Isak Savo Points 15357

Si ce script s'exécute avec /bin/bash vérifiez que le lien symbolique /bin/sh est en train de pocher pour /bin/bash et non un autre Shell ( /bin/dash par exemple). J'ai eu un problème similaire en transférant un bash script d'un ancien système Debian à un plus récent.

Essayez de modifier la première ligne par #!/bin/bash -e .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X