Pourquoi mon script init.d start-stop-daemon n'a-t-il pas démarré l'application au démarrage, mais je peux démarrer le service manuellement?

StackOverflow https://stackoverflow.com/questions/5875289

Question

Je pensais avoir finalement réussi à écrire correctement mon premier script init.d mais quand je suis allé redémarrer, le lancement n'a pas eu lieu.Le script start-foo ressemble à ceci:

#! /bin/sh
# chkconfig 345 85 60
# description: startup script for foo
# processname: foo

NAME=foo
DIR=/etc/foo/services
EXEC=foo.py
PID_FILE=/var/run/foo.pid
IEXE=/etc/init.d/foo
RUN_AS=root

### BEGIN INIT INFO
# Provides:          foo
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     5
# Default-Stop:      0 1 2 3 6
# Description:       Starts the foo service
### END INIT INFO

if [ ! -f $DIR/$EXEC ]
then
        echo "$DIR/$EXEC not found."
        exit
fi

case "$1" in
  start)
        echo -n "Starting $NAME"
    cd $DIR
    start-stop-daemon -d $DIR --start --background --pidfile $PID_FILE --make-pidfile --exec $EXEC --quiet
        echo "$NAME are now running."
        ;;
  stop)
    echo -n "Stopping $NAME"
        kill -TERM `cat $PID_FILE`
    rm $PID_FILE
        echo "$NAME."
        ;;
  force-reload|restart)
        $0 stop
        $0 start
        ;;
  *)
        echo "Use: /etc/init.d/$NAME {start|stop|restart|force-reload}"
        exit 1
    ;;
esac
exit 0

foo.py nécessite sudo pour ouvrir les ports.Je suppose que ce n'est pas un problème puisque d'autres services (comme ) doit avoir besoin de la même chose.J'ai un makefile qui fait ce qui suit:

make install:
  chmod +x start-foo
  cp start-foo /etc/init.d

Si j'exécute sudo service start-foo start, cela fonctionne.Pourtant, lorsque je redémarre, il ne démarre pas automatiquement.Que me manque-t-il?

Était-ce utile?

La solution

Vous avez le lien entre le script et les différents répertoires init au niveau de l'exécution.Essayez chkconfig start-foo on pour activer cela, en supposant que votre box ait installé chkconfig.Sinon, vous devez placer manuellement des liens symboliques dans le répertoire d'initialisation de chaque niveau d'exécution pointant vers le script.

Autres conseils

Essayez de l'ajouter aux niveaux d'exécution nécessaires en utilisant chkconfig

# chkconfig foo on

vous devrez peut-être faire

# chkconfig --add foo

d'abord

Vous avez besoin de liens symboliques dans les différents répertoires /etc/rc.x.

update-rc.d start-foo defaults

Cela créera les liens symboliques pour vous.Et pour les supprimer:

update-rc.d start-foo remove

http://manpages.ubuntu.com/manpages/precise/man8/update-rc.d.8.html

Cela peut avoir quelque chose à voir avec l'ordre dans lequel vous essayez de le démarrer.Si vous avez besoin de démarrer d'autres services avant que votre script ne puisse s'exécuter, vous devriez essayer de le pousser plus bas dans l'ordre d'exécution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top