Страница 1 из 1

Help! rc.d скрипты: не работает command_arg

Добавлено: 2013-01-09 11:59:53
Fast_Deer
Господа, нужна помощь!
ОС FREEBSD 9.
Shell: /bin/sh
Есть 2 скрипта: один находится в каталоге rc.d (к примеру start_scipt) и должен запускать другой из домашнего каталога пользователя (к примеру start_soft). И это как бы работает но не передаются дополнительные аргументы описанные в первом скрипте в параметре command_arg. Из-за этого прога вызываемая во втором скрипте не пашет должным образом. по идее, из start_scipt должна формироваться строка вида $HOME/start_soft $command_arg (где вместо command_arg - значение этой переменной), но из дебага видно что идет простой вызов параметра command без передачи аргументов. Может я что то недопонял из чтения доков? Объясните мне пожалуйста "на пальцах" как заставить передать параметры из переменной command_arg в start_soft. Интересует работа именно этой "встроенной фишки" а не прописывание в переменную command агрументов на ряду со скриптом.
Если кто нить разобрался с написанием rc.d скриптов и может помочь, то могу выложить/выслать листинг своих прог.....
ЗЫ: просто на другом форуме просмотров много но не ни одного ответа

Re: Help! rc.d скрипты: не работает command_arg

Добавлено: 2013-01-09 12:13:30
skeletor
Вы хотите параметры из первого скрипта передавать тоже параметрами во второй?

Re: Help! rc.d скрипты: не работает command_arg

Добавлено: 2013-01-09 12:46:47
Fast_Deer
насколько я понимаю (как это должно работать) из документации:
Дополнительные аргументы команде $command можно передать в переменной command_args. Эти аргументы будут добавлены в командную строку после значения переменной $mumbled_flags. Поскольку командная строка, получившаяся в результате этих преобразований передается команде eval, то перенаправления ввода-вывода могут быть указаны в переменной command_args.
в start_scipt прописано
command="/homepath/start_soft"
command_args="аргументы"
то есть у нас из start_scipt должна формироваться след строка:

Код: Выделить всё

start_soft аргументы
где "агрументы" перечислены в command_args файла start_scipt
вообщем строка формируется без аргументов либо я чтото недопонимаю про вызов
run_rc_command "$1"

Re: Help! rc.d скрипты: не работает command_arg

Добавлено: 2013-01-09 12:54:23
skeletor
Поймите, просто добавить в скрипт строку run_rc_command "$1" ничего не даст. В вашем скрипте должны присутствовать (не уверен, обязательно ли эти 3 строки, может и не все, но желательно):

Код: Выделить всё

. /etc/rc.subr
name="ИМЯ"
load_rc_config $name
А вообще - возьмите любой скрипт из rc.d и просто модифицируйте под себя.

Re: Help! rc.d скрипты: не работает command_arg

Добавлено: 2013-01-09 13:11:29
Fast_Deer
да присутствует это все и в rc.conf прописаны необходимые переменные для запуска, но не работает. Я и так брал готовый скрипт и хочу его переделать, но вот с аргументами не могу пока понять почему не работает
ИМХО: просто модифицировать под себя без понимания - будут те же "грабли"

Re: Help! rc.d скрипты: не работает command_arg

Добавлено: 2013-01-09 14:02:41
skeletor
Грабли могут быть всегда и везде, даже если знаешь матчасть. Для того, что бы переделать скрипт автозапуска под себя необязательно перечитать кучу мануалов про rc-скрипты (на это может уйти очень много времени). А вообще, можно просто поместить команду с аргументами в /etc/rc.local

Re: Help! rc.d скрипты: не работает command_arg

Добавлено: 2013-01-09 15:39:47
Fast_Deer
skeletor писал(а):Грабли могут быть всегда и везде, даже если знаешь матчасть. Для того, что бы переделать скрипт автозапуска под себя необязательно перечитать кучу мануалов про rc-скрипты (на это может уйти очень много времени). А вообще, можно просто поместить команду с аргументами в /etc/rc.local
Во первых мне интересно в этом разобраться и научится писать самому скрипты. Во вторых во FreeBSD Handbook написано:
Заметьте, что rc.local используется для запуска сервисов только в крайнем случае. Если есть лучший способ запустить сервис, используйте его.
в третьих^ если прогу (бинарник) вызываешь не из его каталога, то базу с которой работает прога, она не находит и при этом сильно ругается. причем пути на базу в опциях проги не предусмотрено - считается что она лежит в каталоге с прогой. А так как я хочу обеспечить автозапуск и автошотдаун работы этой проги (перезагрузка ОС), то нужен нормальный rc.d скрипт, который может обрабатывать стандартные аргументы из rc.subr.
Насколько я понимаю спецов по rc.d-скриптингу тут тоже нет :( (или они в отпуске :-D )

Re: Help! rc.d скрипты: не работает command_arg

Добавлено: 2013-01-09 15:45:18
skeletor
Ну если у вас времени вагон, то можно и разбираться, а если нужно за полчаса сделать - то вникать особо нету времени.

Re: Help! rc.d скрипты: не работает command_arg

Добавлено: 2013-01-09 19:56:34
Fast_Deer
ну времени не вагон но это все ж домашний сервак, а не рабочий, где стоит начальство над душой...
.... хотя жена над душой все ж стоит по поводу неработоспособности сервака

Re: Help! rc.d скрипты: не работает command_arg

Добавлено: 2013-01-09 20:43:50
FreeBSP

Код: Выделить всё

# chmod +x  /usr/local/etc/rc.d/testscript
# /usr/local/etc/rc.d/testscript
Usage: /usr/local/etc/rc.d/testscript [fast|force|one](start|stop|restart|rcvar|status|poll)
# /usr/local/etc/rc.d/testscript onestart
/usr/local/etc/rc.d/testscript: WARNING: run_rc_command: cannot run /root/bin/test_rc_target
# chmod +x /root/bin/test_rc_target
# /usr/local/etc/rc.d/testscript onestart
Starting test.
3
arg1 arg2 arg3
# cat /usr/local/etc/rc.d/testscript
#!/bin/sh
#
# $FreeBSD: release/9.0.0/etc/rc.d/cron 174438 2007-12-08 07:20:23Z dougb $
#

# PROVIDE: test
# REQUIRE: LOGIN
# KEYWORD: shutdown

. /etc/rc.subr

name="test"
rcvar="`set_rcvar`"

load_rc_config $name

command="/root/bin/test_rc_target"
command_args="arg1 arg2 arg3"

: ${test_enable="NO"}

run_rc_command "$1"

# cat /root/bin/test_rc_target
#!/bin/sh

echo $#
echo $*
#

Re: Help! rc.d скрипты: не работает command_arg

Добавлено: 2013-01-10 23:35:44
Fast_Deer
Спасибо! Поразбираюсь.

Re: Help! rc.d скрипты: не работает command_arg

Добавлено: 2013-01-11 0:16:37
Fast_Deer
Спасибо! нашел ошибку! "Олень" все ж я!
Тему можно закрывать

Re: Help! rc.d скрипты: не работает command_arg

Добавлено: 2013-01-14 18:40:55
skeletor
Напишите хотя бы, где была ошибка, а то такие же потом искать проблему и кричать.

Re: Help! rc.d скрипты: не работает command_arg

Добавлено: 2013-01-15 10:01:24
FreeBSP
Fast_Deer писал(а): по идее, из start_scipt должна формироваться строка вида $HOME/start_soft $command_arg_
FreeBSP писал(а):command_args="arg1 arg2 arg3"
он с недосыпа букву пропустил