Problèmes de PATH pour les scripts init.d au démarrage

8

J'ai un script simple qui démarre une instance de licorne (sur Ubuntu 12.04LTS).

#!/bin/sh

case "$1" in
    start)
       echo "starting"
       cd /path && bundle exec unicorn -c /path/config/unicorn.rb -D -E production
      ;;
     stop)
      echo "Stopping Unicorn Instances"
      kill `cat /tmp/unicorn.pid`
    ;;
    restart)
    echo "sending USR2 to all unicorns"
    kill -s USR2 `cat /tmp/unicorn.pid`
    ;;
esac
exit 0

Il se comporte correctement lorsqu'il est appelé: /etc/init.d/unicorn_boot.sh start

Je veux qu'il démarre au démarrage, alors j'ai couru: update-rc.d -f unicorn_boot.sh defaults

Lorsque je redémarre maintenant, j'obtiens l'erreur suivante:

/etc/rc2.d/S20unicorn_boot.sh: 10: /etc/rc2.d/S20unicorn_boot.sh: bundle: not found

J'ai vérifié la bundlecommande, et elle est installée /usr/local/bin, de même pour la rubycommande.

Il semble qu'au démarrage, le PATHne comprend pas encore /usr/local/bin. Comment puis-je réparer cela?

Peterdk
la source

Réponses:

9

Les scripts de script sont chargés de définir eux-mêmes un chemin approprié. Définissez la $PATHvariable en haut du script:

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
mgorven
la source
OK merci. Je ne le savais pas. C'est réparé maintenant!
Peterdk
Alternativement, vous devriez pouvoir définir PATH="$PATH:/usr/local/bin"pour ajouter vos chemins requis à la variable, plutôt que de remplacer entièrement la variable $ PATH.
jaseeey
Compter sur un $ PATH extérieur est un risque pour la sécurité. N'ajoutez pas un CHEMIN existant! Créez le vôtre avec la liste exacte dont vous avez besoin.
Brendan Byrd