web-dev-qa-db-fra.com

problèmes de démarrage du script init.d

J'ai ce script init.d que j'essaie de démarrer au démarrage avec Ubuntu, mais il ne s'exécutera pas au démarrage. Cela fonctionne quand je tape "Sudo /etc/init.d/couchpotato start" cependant. Des idées sur la façon de commencer à démarrer?

#! /bin/sh

### BEGIN INIT INFO
# Provides:          CouchPotato application instance
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts instance of CouchPotato
# Description:       starts instance of CouchPotato using start-stop-daemon
### END INIT INFO

############### EDIT ME ##################
# path to app
APP_PATH=/usr/local/sbin/couchpotato

# path to python bin
DAEMON=/usr/bin/python

# startup args
DAEMON_OPTS=" CouchPotato.py -q"

# script name
NAME=couchpotato

# app name
DESC=CouchPotato

# user
RUN_AS=root

PID_FILE=/var/run/couchpotato.pid

############### END EDIT ME ##################

test -x $DAEMON || exit 0

set -e

case "$1" in
  start)
        echo "Starting $DESC"
        start-stop-daemon -d $APP_PATH -c $RUN_AS --start --background --pidfile $PID_FILE  --make-pidfile --exec $DAEMON -- $DAEMON_OPTS
        ;;
  stop)
        echo "Stopping $DESC"
        start-stop-daemon --stop --pidfile $PID_FILE
        ;;

  restart|force-reload)
        echo "Restarting $DESC"
        start-stop-daemon --stop --pidfile $PID_FILE
        sleep 15
        start-stop-daemon -d $APP_PATH -c $RUN_AS --start --background --pidfile $PID_FILE  --make-pidfile --exec $DAEMON -- $DAEMON_OPTS
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

exit 0
3
Will

Vous pouvez essayer d'utiliser la commande insserv. À partir de la commande "man insserv" sur une installation 10.10, je peux lire:

insserv - Enable an installed system init script.
2
jfmessier

Vous pouvez essayer d’exécuter ceci dans le terminal:

Sudo chmod 755 /etc/init.d/couchpotato

Sudo update-rc.d par défaut

================================

Et lorsque vous souhaitez désactiver son exécution au démarrage:

Sudo update-rc.d -f couchpotato supprimer

Pour en savoir plus, faites:

man update-rc.d

8
iugamarian

Je n'ai jamais pu faire fonctionner le script init.d fourni. Je pourrais très bien l'utiliser, mais init.d commencerait couchpotato, mais je ne pourrais jamais me connecter. Je suis allé de l'avant et créé mon propre script sale pour cela. Cela devrait fonctionner si vous utilisez le chemin ~/.couchpotato pour votre installdir.

### BEGIN INIT INFO
# Provides:          CouchPotato application instance
# Required-Start:    $local_fs $network $remote_fs
# Required-Stop:     $local_fs $network $remote_fs
# Should-Start:      $NetworkManager
# Should-Stop:       $NetworkManager
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts instance of CouchPotato
# Description:       starts instance of CouchPotato using start-stop-daemon

### END INIT INFO

USER="youruser"

case "$1" in

  start)
        echo "Starting $DESC"
        /home/micdawg/.couchpotato/CouchPotato.py &
        ;;
  stop)
        echo "Stopping $DESC" 
        PID=`ps -ef | grep CouchPotato.py | grep -v grep | awk '{print $2}'`
        kill -9 $PID 
        ;;

  restart|force-reload)
        echo "Restarting $DESC"
        PID=`ps -ef | grep CouchPotato.py | grep -v grep | awk '{print $2}'`
        kill -9 $PID 
        sleep 15
        /home/micdawg/.couchpotato/CouchPotato.py &
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac
exit 0
2
Mike

La réponse acceptée suppose que "upstart" est utilisé pour démarrer les processus au démarrage du système. Ce n'est pas toujours le cas. J'utilise Ubuntu 9.04 Minimal s'exécutant sur un serveur privé virtuel et cela n'utilise pas de démarrage.

Dans ce cas, pour que le système puisse remarquer et exécuter les scripts dans /etc/init.d, vous devez exécuter update-rc.d qui a créé des liens symboliques vers votre script inet.d à des emplacements où le système cherchera des instructions. quand ça démarre.

Quelque chose comme ça:

update-rc.d couchpotato defaults 92

La valeur 92 est une valeur raisonnable pour la priorité, retardant le démarrage de votre script jusqu'à ce que d'autres tâches importantes soient en cours d'exécution.

Voici plus de détails à propos de l'exécution de update-rc.d

1
ravenspoint

les informations de man: LSB sont utilisées (..). Cet en-tête doit obligatoirement être présent dans les scripts init.d. Voir la page de manuel insserv (pour plus d'informations sur le format d'en-tête LSB.

Exemple:

### BEGIN INIT INFO
# Provides: Apache2
# 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
# X-Interactive: true
# Short-Description: Start/stop Apache2 web server
### END INIT INFO 
1
aric

Si vous ne comprenez pas pourquoi votre service ne démarre pas au démarrage. Cependant, il démarre parfaitement lorsque vous essayez de le démarrer manuellement avec la commande service <your service> start. Ensuite, essayez de rediriger la sortie standard et la sortie d'erreur vers un fichier. Ce qui peut vous donner une idée de la raison pour laquelle cela ne démarre pas

par exemple. dans votre script

case "$1" in
  start)
    echo "Starting Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  stop)
    echo "Stopping Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  *)
    echo "Usage: /etc/init.d/test {start|stop}"
    exit 1
    ;;
esac

exit 0
1
Pandurang Patil