У меня есть медиа-сервер, работающий на OpenSolaris, который использует Coherence для передачи медиа в сеть. Иногда у меня возникают проблемы при запуске, так как служба Coherence не запускается, потому что файл блокировки все еще существует (он не был очищен должным образом).
Я хочу знать, каков наилучший / самый удобный / самый официальный способ удалить этот файл при запуске до того, как служба Coherence попытается запустить.
Я думал о том, чтобы написать быстрый скрипт и поместить его в /etc/rc3.d/, но я читал, что OpenSolaris не обязательно запускает скрипты из этого места.
Solaris использует SMF для управления службами, но по-прежнему поддерживает структуру rc. Каким образом Coherence запускается в вашей системе? Я бы сказал, что вам нужно использовать тот же метод для вашего скрипта удаления блокировок.
Для документации по Solaris Service Management Facility (SMF) см. этот.
С этой страницы:
Обратите внимание, что svcadm следует использовать только для служб SMF - устаревшие службы, управляемые сценариями rc, работают так же, как и в предыдущих выпусках.
И:
Службы, которые запускаются традиционными сценариями rc (называемые устаревшими службами), как правило, будут продолжать работать, как всегда. Они будут отображаться в выводе svcs (1) с FMRI, основанным на пути к их сценарию rc, но они не могут управляться svcadm (1M). Их следует остановить и запустить, запустив непосредственно сценарий rc.
Как упоминалось в разделе «Заметные изменения», сценарии rc могут не запускаться в тот же момент при загрузке, что и в более ранних версиях Solaris. В частности, сценарии, которые зависят от запуска до определенных сценариев rc, предоставляемых Solaris, могут столкнуться с проблемами. Однако подавляющее большинство скриптов должно продолжать работать без каких-либо проблем.
Просто для информации для будущих людей.
Я исправил свою проблему, изменив скрипт coherence.sh (который используется svcadm для запуска / остановки сервера), добавив код для определения, работает ли сервер, и удалив там файл журнала, если это не так.
Код вставлен:
check() {
if [ -f ${LOCKFILE} ]; then
pgrep -f /usr/bin/$PROGNAME &> /dev/null
RETVAL=$?
[ ${RETVAL} -ne 0 ] && rm -rf ${LOCKFILE}
echo ${RETVAL}
fi
return 0
}
Затем я вызвал эту функцию с самого начала функции start () и непосредственно перед тем, как вернуться в функцию stop ().
Это проверит, запущен ли исполняемый файл, и удалит файл журнала, если это не так. Кажется, работает нормально, и у меня не было никаких проблем.