Вопрос по debian, initialization, perl, plack –  из вопроса.

5

я есть приложение, которое выполняется в учетной записи пользователя (на основе Plack) и хочу скрипт инициализации.

Это выглядит так же просто, как "sudo $ user start_server ...". Я только что написал скрипт LSB с использованием start-stop-daemon, и он действительно неуклюжий и многословный. Это не похоже на правильный путь.

Поработав немного и посмотрев журнал примеров, я все еще не уверен, что лучший способ сделать это - нет единого руководства, которое я нашел.

Прямо сейчас у меня это работает с:

start-stop-daemon --background --quiet --start --pidfile $PIDFILE \
                --make-pidfile --chuid $DAEMONUSER \
                --exec $DAEMON -- $DAEMON_OPTS

С DAEMON и DAEMON_OPTS как:

DAEMON="/home/mediamogul/perl5/perlbrew/perls/current/bin/start_server"
DAEMON_OPTS="--p,ort $PORT -- starman --workers $WORKERS /home/mediamogul/MediaMogul/script/mediamogul.psgi"

Затем мне необходимо настроить способ обнаружения запуска, потому что это скрипт на perl, поэтому perl отображается как команда, а не как «start_server».

(Я запускаю это из perlbrew для этой учетной записи пользователя, поэтому он полностью отделен от системного perl, поэтому пути указывают на perl в пользовательском каталоге)

Это действительно лучший способ сделать это? Это кажется мне очень неуклюжим, но я не администратор.

Я тоже заинтересован в ответе. Я очень удивлен, что start_server не демонизируется. dolmen
Если это полезно, я могу опубликовать свой полный сценарий инициализации в gist. jshirley

Ваш Ответ

1   ответ
2

--pid опция для starman, чтобы он записывал PID при запуске приложения, если вы используете то же имя файла, что и start-stop-daemon, то оно будет работать нормально.

Например, из одного из моих скриптов init.d:


SITENAME=mysite
PORT=5000
DIR=/websites/mysite
SCRIPT=bin/app.pl
USER=davidp<p></p>

<p>PIDFILE=/var/run/site-$SITENAME.pid</p>

case "$1" in start) start-stop-daemon --start --chuid $USER --chdir $DIR \ --pidfile=$PIDFILE \ --exec /usr/local/bin/starman -- -p $PORT $SCRIPT -D --pid $PIDFILE ;; stop) start-stop-daemon --stop --pidfile $PIDFILE ;; *) echo "Usage: $SCRIPTNAME {start|stop}" >&2 exit 3 ;; esac

It's very close to what you are already doing, and I'll admit it is a little clumsy, granted, but it works - having Starman write the PID file means that start-stop-daemon can reliably start & stop it.

Этот ответ неполон: он обходит использованиеstart_server супердемон из вопроса. dolmen

Похожие вопросы