On 01.02.2015 13:21, kry...@ukr.net wrote:

Вы запутались в синтаксических конструкциях шелла,
которыми, увы, владеете совсем нетвердо.

> name=`echo $0 | sed 's/.*\///'`

Потрассируем:
name=mpd5

> rcvar=${name}_enable
rcvar=mpd5_enable

> var=`eval echo $name`_enable

var=mpd5_enable

> eval $var="NO"

mpd5_enable=NO

То есть, тут принудительно mpd5_enable сброшено в NO.
Не думаю, что так задумано.

> var1=`eval echo $name`_flags
> eval $var1="-b"

И тут тоже mpd5_flags принудительно сбрасывается в -b.

Каждое использование обратных апострофов это запуск сабшелла, не надо так.
Надо вот как:

name=${0##*/} # а ещё лучше не извращаться и написать просто name=mpd5, так 
читабельней
rcvar=$name_enable              # тут будет rcvar=mpd5_enable
eval var=\$$name_enable         # тут будет var=$mpd5_enable

Но и это тоже всё сплошь плохо читаемые и никому ненужные усложнения.
Делайте нормально:

name=mpd5
rcvar=$name_enable              # или даже rcvar=mpd5_enable
: ${mpd5_enable:=NO}            # если mpd5_enable пусто, то присвоить NO, 
иначе не менять

> Можно, конечно, monit поставить, и пусть следит за процессом,
> но хотелось бы понять, что ж ему не хватает.

См. выше.

> Плюс, если кто знает, как можно проверить работоспособность
> стартовых скриптов не перезагружая сервер. Как я понял, команды
> start/stop не совсем показатель того, что все ок.

start/stop показатель, если сам скрипт не содержит ошибок.
А если сам скрипт сбрасывает mpd5_enable в NO...
Такие ошибки можно искать через sh -x /usr/local/etc/rc.d/mpd5 start 2>&1

Ответить