5

我有一个在用户帐户(基于 Plack)中运行的应用程序,并且需要一个 init 脚本。

它看起来就像“sudo $user start_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

您可以使用--pidstarman 的选项让它在应用程序启动时写入 PID,如果您使用与 start-stop-daemon 相同的文件名,那么它将很好地工作。

例如,从我的 init.d 脚本之一:


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

它非常接近您已经在做的事情,我承认它有点笨拙,当然,但它确实有效 - 让 Starman 编写 PID 文件意味着 start-stop-daemon 可以可靠地启动和停止它。

于 2011-03-31T17:11:53.950 回答