5

ユーザーアカウント(Plackベース)で実行するアプリケーションがあり、initスクリプトが必要です。

「sudo$userstart_server...」と同じくらい簡単なようです。start-stop-daemonを使用してLSBスクリプトを作成したところ、非常に不器用で冗長です。それは正しい方法のようには感じません。

少し精査して例のログを見た後、これを行うための最良の方法がまだわかりません。また、私が見つけたまとまりのあるガイドはありません。

今、私はそれを使っています:

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="--port $PORT -- starman --workers $WORKERS /home/mediamogul/MediaMogul/script/mediamogul.psgi"

これは、実行を検出する方法を調整する必要があります。これは、perlスクリプトであり、perlが「start_server」ではなくコマンドとして表示されるためです。

(私はそのユーザーアカウントのperlbrewからこれを実行しているので、システムのperlから完全に分離されています。そのため、パスはユーザーディレクトリのperlを指しています)

これは本当にこれを行うための最良の方法ですか?私には非常に不格好に思えますが、私は管理者タイプではありません。

4

1 に答える 1

3

スターマンのオプションを使用し--pidて、アプリの起動時にPIDを書き込ませることができます。start-stop-daemonを指定したのと同じファイル名を使用すると、正常に機能します。

たとえば、私のinit.dスクリプトの1つから:


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

PIDFILE=/var/run/site-$SITENAME.pid

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

それはあなたがすでに行っていることに非常に近いです、そして私はそれが少し不器用であることを認めます、確かに、しかしそれは機能します-スターマンにPIDファイルを書かせることはstart-stop-daemonがそれを確実に開始および停止できることを意味します。

于 2011-03-31T17:11:53.950 に答える