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?

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.