Best init script for running an application as a separate user

半腔热情 提交于 2019-12-09 13:29:26

问题


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.


回答1:


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.



来源:https://stackoverflow.com/questions/5500943/best-init-script-for-running-an-application-as-a-separate-user

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!