Best init script for running an application as a separate user

I have an application that runs in a user account (Plack-based) and want an init script.

It seems as easy as "sudo $user start_server ...". I just wrote an LSB script using start-stop-daemon and it is really clumsy and verbose. It doesn't feel like the right way.

After scouring for a bit and looking at a log of examples, I'm still not sure what the best way to do this is and there isn't a cohesive guide that I've found.

Right now I have it working with:

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

With DAEMON and DAEMON_OPTS as:

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

This then requires me to adjust how to detect running, because it's a perl script so perl is showing up as the command and not "start_server".

(I'm running this out of a perlbrew on that user account so it is completely separate from the system perl, that's why the paths are pointing to a perl in the user dir)

Is this really the best way to go about doing this? It seems very clunky to me, but I'm not an admin type.


You can use the --pid option to starman to have it write the PID when the app starts, if you use the same filename as you give start-stop-daemon then it will work nicly.

For example, from one of my init.d scripts:


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

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.

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

上一篇: 在Ubuntu中调试/etc/init.d启动脚本

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