如何将GAE作为后台服务运行

时间:2014-09-09 20:29:17

标签: linux google-app-engine

我找到了一个init.d脚本模板 - 填充空白并尝试使用以下内容调用GAE:

start-stop-daemon -S --background python
/opt/google_appengine/dev_appserver.py --host=0.0.0.0
--admin_host=0.0.0.0 --php_executable_path=/usr/bin/php-cgi /var/www

这不起作用......但如果我从命令行运行正常但挂起输入......

如何在启动时使用init.d调用此命令并更改为用户“gae” - 类似于Apache运行为www-data

2 个答案:

答案 0 :(得分:0)

我也(简要地)尝试使用start-stop-daemon来控制Google App Engine(没有任何运气),所以我最终使用/etc/rc.local来启动守护程序。

将以下内容添加到/etc/rc.local(任何exit命令之前):

sudo -i -u gae python /opt/google_appengine/dev_appserver.py --host=0.0.0.0 \
        --storage_path /var/cache/appengine/gae \
        --admin_host=0.0.0.0 --php_executable_path=/usr/bin/php-cgi /var/www > /dev/null 2> /dev/null &

注意,我在启动选项中包含了storage_path。确保执行以下操作:

sudo mkdir -p /var/cache/appengine/gae
sudo chown gae: /var/cache/appengine/gae

要重新启动进程(更新后),我只需要杀死python并手动执行rc.local:

sudo killall -9 python
sudo /etc/rc.local

答案 1 :(得分:0)

我终于弄清楚了start-stop-daemon是如何以及为什么不能正常工作......这一切都归结为一些简单的语法错误和一个(仍然?)我的误解:

https://unix.stackexchange.com/questions/154692/start-stop-daemon-wont-start-my-python-script-as-service

简而言之,当我使用这个init.d脚本并相应地注册它时,GAE会相应地启动和停止:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          Google App Engine daemon management
# Required-Start:    
# Required-Stop:     
# Default-Start:     
# Default-Stop:      
# Short-Description: Google App Engine initscript
# Description:       Start/stop appengine web server

### END INIT INFO

# Author: Alex Barylski <alex.barylski@gmail.com>

. /lib/lsb/init-functions

#
# Initialize variables
#

name=appengine
desc="Google App Engine"

bind=0.0.0.0

docroot=/var/www
phpexec=/usr/bin/php-cgi

pidfile=/var/run/$name.pid

args="--host=$bind --admin_host=$bind --php_executable_path=$phpexec"
prog='/usr/bin/python /opt/google_appengine/dev_appserver.py'

#
# TODO: Figure out how to switch user (ie: --chuid www-data)
#

case "${1}" in
   start)
      echo "Starting...$desc"
      start-stop-daemon --start --make-pidfile --background --oknodo \
                        --pidfile $pidfile \
                        --name $name \
                        --exec $prog \
                        -- $args $docroot 
      ;;

   stop)
      echo "Stopping...$desc"
      start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $prog
      ;;

   restart)
      ${0} stop
      sleep 1
      ${0} start
      ;;

   *)
      echo "Usage: ${0} {start|stop|restart}"
      exit 1
      ;;
esac

exit 0

我无法弄清楚如何以www-data启动服务,我确信我可以使这个脚本更加健壮,但出于开发目的,它已经足够并且可以作为守护进程运行。

希望这可以帮助将来的某个人, 亚历