Masalah PATH untuk skrip init.d saat startup


8

Saya memiliki skrip sederhana yang memulai contoh unicorn (di 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

Berperilaku dengan benar ketika dipanggil: /etc/init.d/unicorn_boot.sh start

Saya ingin memulai saat boot, jadi saya berlari: update-rc.d -f unicorn_boot.sh defaults

Ketika saya reboot sekarang saya mendapatkan kesalahan berikut:

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

Saya memeriksa bundleperintah, dan itu dipasang di /usr/local/bin, sama untuk rubyperintah.

Tampaknya saat boot PATHbelum termasuk /usr/local/bin. Bagaimana saya bisa memperbaikinya?

Jawaban:


9

Skrip init bertanggung jawab untuk menetapkan jalur yang sesuai sendiri. Setel $PATHvariabel di bagian atas skrip:

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin

Ok terima kasih. Tidak tahu itu. Sudah diperbaiki sekarang!
— Peterdk

Sebagai alternatif, Anda harus dapat mengatur PATH="$PATH:/usr/local/bin"untuk menambahkan path yang diperlukan Anda ke variabel, daripada mengganti variabel $ PATH sepenuhnya.
— jaseeey

Mengandalkan $ PATH di luar adalah risiko keamanan. Jangan tambahkan PATH yang ada! Buat daftar Anda sendiri dengan daftar persis yang Anda butuhkan.
— Brendan Byrd
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.