用于以独立用户身份运行应用程序的最佳init脚本

我有一个运行在用户帐户(基于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)

这真的是这样做的最好方法吗? 这对我来说似乎很笨重,但我不是管理员类型。


您可以使用--pid选项让starman在应用程序启动时写入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可以可靠地启动和停止它。

链接地址: http://www.djcxy.com/p/75485.html

上一篇: Best init script for running an application as a separate user

下一篇: How do I translate init.d scripts from Ubuntu/Debian Linux to Solaris?