init.d 脚本似乎正在运行但立即终止

init.d 脚本似乎正在运行但立即终止

我注册了 init.d 脚本,当我直接调用 /etc/init.d/gae 时,它​​似乎可以工作……PID 文件已创建,但当我执行附言

我已经谷歌搜索过了,确定这可能是路径问题,因为“python”没有正确定位?如果我删除“引号”程序变量 Google AppEngine 按预期运行并保持运行,但它也不会脱离终端......有什么想法吗?

name=gae
user=$name

pid=/var/run/$name.pid
prog="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"


case "${1}" in
   start)
      echo "Starting...Google App Engine"
      start-stop-daemon --start --make-pidfile --background --oknodo --user "$user" --name "$name" --pidfile "$pid" --startas "$prog" 

      ;;

   stop)
      echo "Stopping...Google App Engine"

      ;;

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

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

exit 0

答案1

您需要将命令及其选项分开,将所有这些选项指定为 --startas "$prog" 意味着 start-stop-daemon 将查找名为“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”的命令,所有字符串都没有任何选项...

所以:

prog="python"
options="/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"
...
start-stop-daemon --start --make-pidfile --background --oknodo --user "$user" --name "$name" --pidfile "$pid" --startas "$prog" -- $options

此外,如果 dev_appserver.py 具有执行权限并以 #!/usr/bin/python 开头,则将其设为 $prog 并将其从 $options 中删除:

prog="/opt/google_appengine/dev_appserver.py"
options="--host=0.0.0.0 --admin_host=0.0.0.0 --php_executable_path=/usr/bin/php-cgi /var/www"

相关内容