jsh*_*ley 5 perl debian initialization plack
我有一个在用户帐户(基于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
Run Code Online (Sandbox Code Playgroud)
使用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"
Run Code Online (Sandbox Code Playgroud)
这需要我调整如何检测运行,因为它是一个perl脚本,所以perl显示为命令而不是"start_server".
(我在该用户帐户上使用perlbrew运行它,因此它与系统perl完全分开,这就是路径指向用户目录中的perl的原因)
这真的是最好的方法吗?这对我来说似乎非常笨重,但我不是一个管理员类型.
您可以使用--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
Run Code Online (Sandbox Code Playgroud)
它非常接近你已经在做的事情,我承认它有点笨拙,但它确实有效 - 让 Starman 写入 PID 文件意味着 start-stop-daemon 可以可靠地启动和停止它。