Здравствуйте Уважаемые!Пишу тут стартовый скрипт, чтобы при старте системы запускал мой воркер. Хочу сделать по уму, т.е. через стартовые скрипты, а не жостко прописать в rc.local
Итак, всё это в FreeBSD.
rc.conf:
====================================================
MyWorker_enable="YES"
MyWorker_dir="/var/www/vhosts/my.app"
Стартовый скрипт MyWorker:
====================================================
#!/bin/sh
. /etc/rc.subr
name="MyWorker"
rcvar=`set_rcvar`
: ${MyWorker_dir:=}
command_interpreter="/bin/sh"
command="worker/shell/start.worker.sh"
pidfile="/var/run/${name}.pid"
start_precmd="${name}_prestart"
# Проверяем наличие стартовых скриптов и переходим в указанную папку
MyWorker_prestart(){
# Должен быть указан базовый каталог приложения
if [ -z ${MyWorker_dir} ] ; then
warn "MyWorker_dir is not set."
return 1
fi
# Он должен существовать
if [ ! -d ${MyWorker_dir} ] ; then
warn "MyWorker dir [ ${MyWorker_dir} ] not exists."
return 1
fi
# Должен существовать стартовый скрипт воркера
if [ ! -f ${MyWorker_dir}/worker/shell/start.worker.sh ] ; then
warn "Main worker script [ ${MyWorker_dir}/worker/shell/start.worker.sh ] not exist."
warn "incorrect MyWorker_dir settings?"
return 1
fi
# Go to basedir
cd ${MyWorker_dir}
return 0
}
load_rc_config ${name}
run_rc_command "$1"
=============================================
В чём проблема? Проблема в том, что путь в котором запускаемый этим скриптом файл, лежит в каталоге задаваемом в rc.conf MyWorker_dir
И значит в стартовом скрипте я не могу статически прописать значение command=..., т.к. полный путь зависит от настройки в rc.conf
Я понимаю, что это можно решить заменив стартовую процедуру start_cmd="${name}_start"
и в ней описать уже имея на руках значение этой переменной из rc.conf, но тогда я не понимаю - как сделать чтобы pid файл корректно создался? Как передать системе инициализаци после команды start, какой PID надо сохранить в pid файле указанном в pidfile="/var/run/${name}.pid"?
Помогите пожалуйста разобраться.