On 01.02.2015 13:21, [email protected] 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