Các vấn đề về PATH cho các tập lệnh init.d khi khởi động


8

Tôi có một tập lệnh đơn giản khởi động một thể hiện kỳ ​​lân (trên 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

Nó hoạt động chính xác khi được gọi: /etc/init.d/unicorn_boot.sh start

Tôi muốn nó bắt đầu khởi động, vì vậy tôi đã chạy: update-rc.d -f unicorn_boot.sh defaults

Khi tôi khởi động lại, tôi gặp lỗi sau:

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

Tôi đã kiểm tra bundlelệnh và nó được cài đặt /usr/local/bin, tương tự cho rubylệnh.

Có vẻ như khi khởi động PATHchưa bao gồm /usr/local/bin. Làm thế nào tôi có thể sửa lỗi này?

Câu trả lời:


9

Initscripts chịu trách nhiệm thiết lập một đường dẫn thích hợp. Đặt $PATHbiến ở đầu tập lệnh:

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

Được rồi cảm ơn. Không biết điều đó. Bây giờ đã được sửa!
Peterdk

Ngoài ra, bạn sẽ có thể thiết lập PATH="$PATH:/usr/local/bin"để nối các đường dẫn cần thiết của mình vào biến, thay vì ghi đè hoàn toàn biến $ PATH.
jaseeey

Dựa vào $ PATH bên ngoài là một rủi ro bảo mật. Đừng nối thêm một PATH hiện có! Tạo của riêng bạn với danh sách chính xác bạn cần.
Brendan Byrd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.