Не удалось вызвать команду из скрипта

1

я установил oversip & когда я пытаюсь выполнить команду «oversip» из оболочки,

[root@vhost1111 ~]# oversip
NOTICE: <executable> OverSIP 1.3.8 starting...

это выполняется. Но когда я помещаю эту команду в сценарий оболочки, а затем запускаю сценарий оболочки. Это говорит, что команда не найдена.

[root@vhost1111 ~]# ./init.sh start
Switch to user oversip
Starting oversip: ./init.sh: line 21: oversip: command not found

---- Пропускной путь ----

[root@vhost1111 idcuser]# which oversip
/usr/local/rvm/gems/ruby-1.9.2-p320/bin/oversip

---- $ PATH -----

[root@vhost1111 idcuser]# echo $PATH
/usr/local/rvm/gems/ruby-1.9.2-p320/bin/oversip:
/usr/local/rvm/gems/ruby-1.9.2-p320/bin:
/usr/local/rvm/gems/ruby-1.9.2-p320@global/bin:/usr/local/rvm/rubies/ruby-1.9.2-320/bin:
/usr/local/rvm/bin:/sbin:/bin:/usr/sbin:/usr/bin:/sbin/:/usr/bin/:/usr/sbin/:/usr/local/bin:/bin:/usr/local/sbin/:/usr/local/rvm/bin

Содержимое init.sh

#!/bin/sh
PID="--pid /var/run/oversip/oversip.pid -u oversip";
if [ ! -d /var/run/oversip ]; then
mkdir -p /var/run/oversip
fi
if id -u oversip >/dev/null 2>&1; then
echo "Switch to user oversip";
else
adduser -u 106 -g 99 --shell /bin/false -b /var/run oversip
chown oversip /var/run/oversip 
fi

. /etc/rc.d/init.d/functions
case "$1" in
start)
echo -n "Starting oversip: "
oversip $PID
echo
touch /var/lock/subsys/oversip
;;
stop)
echo -n "Shutting down oversip ??: "
killproc oversip
echo
rm -f /var/lock/subsys/oversip
;;
status)
status oversip
;;
condrestart)
if [ -f /var/lock/subsys/oversip ]; then
$0 stop
$0 start 
fi
;;
reload|restart)
$0 stop
$0 start
echo "destroy existing connections during a restart."
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit 0

Я добавил в сценарий «oversip типа», а также «which oversip»:

./init.sh: line 20: type: oversip: not found
which: no oversip in (/sbin:/usr/sbin:/bin:/usr/bin)
Ashish
источник
Где находится исполняемый файл? (вывод which oversip) Похоже, что это в корне PATH, но не в PATHперегибе пользователя.
Леванс
Можете ли вы опубликовать содержимое init.sh или хотя бы строку, которая вызывает oversip. также выполните эту команду which overshipиз вашей оболочки и сообщите нам результаты.
Booyaa
Я обновил вопрос выводом 'which oversip' и содержимым $ PATH.
Ашиш
И о содержании init.sh, и $PATHо пользователе oversip? Это соответствующие вещи здесь.
Леванс
1
Попробуйте добавить type oversip; which oversipнепосредственно перед echo -n "Starting oversip: "Under start)в этом сценарии. Я готов поспорить, что это простой путь, и это подтвердит это. Если это так, это может быть так же просто, как указать полный путь к исполняемому файлу. (Вы могли бы также хотеть эхо $ PATH и $ LD_LIBRARY_PATH, последний , если программное обеспечение требует каких - либо конкретных библиотек самостоятельно.) Вы , возможно , необходимо продвигать скрипт использовать / bin / Баш вместо / bin / ш для typeк работе, но я думаю, что с тобой все будет в порядке.
CVn

Ответы:

0

Ваш скрипт инициализации говорит вам

which: no oversip in (/sbin:/usr/sbin:/bin:/usr/bin)

Твоя оболочка говорит тебе

# which oversip
/usr/local/rvm/gems/ruby-1.9.2-p320/bin/oversip

Как вы думаете, какой каталог нужно добавить в PATH в скрипте инициализации?

PATH="$PATH:/usr/local/rvm...320/bin"
Гленн Джекман
источник
Я добавил: export PATH=/usr/local/rvm/gems/ruby-1.9.2-p320/bin/:$PATH в сценарий инициализации, но он все еще не работает.
Ашиш
Когда я проверяю $ PATH из сценария инициализации, он показывает содержимое PATH, как указано в обновленном вопросе. Но когда я делаю which oversip, почему это показывает: no oversip in (/sbin:/usr/sbin:/bin:/usr/bin)что такое /sbin:/usr/sbin:/bin:/usr/bin? , поскольку это не совпадает с моим содержимым $ PATH.
Ашиш