Problemas de PATH para scripts init.d na inicialização

8

Eu tenho um script simples que inicia uma instância de unicórnio (no 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

Ele se comporta corretamente quando chamado: /etc/init.d/unicorn_boot.sh start

Eu quero que ele inicie na inicialização, então eu corri: update-rc.d -f unicorn_boot.sh defaults

Quando agora reinicio, recebo o seguinte erro:

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

Eu verifiquei o bundlecomando e ele está instalado /usr/local/bin, o mesmo para o rubycomando.

Parece que na inicialização o PATHainda não inclui /usr/local/bin. Como posso consertar isso?

Peterdk
fonte

Respostas:

9

Initscripts são responsáveis ​​por definir um caminho apropriado. Defina a $PATHvariável na parte superior do script:

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
mgorven
fonte
Ok obrigado. Não sabia disso. Está consertado agora!
Peterdk 22/02
Como alternativa, você deve poder configurar PATH="$PATH:/usr/local/bin"para anexar os caminhos necessários à variável, em vez de substituir completamente a variável $ PATH.
jaseeey
Depender de um $ PATH externo é um risco à segurança. Não anexe um PATH existente! Crie o seu próprio com a lista exata que você precisa.
Brendan Byrd