Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Ubuntu upstart从Play 1.3中获得错误的PID_Linux_Ubuntu_Playframework_Upstart - Fatal编程技术网

Linux Ubuntu upstart从Play 1.3中获得错误的PID

Linux Ubuntu upstart从Play 1.3中获得错误的PID,linux,ubuntu,playframework,upstart,Linux,Ubuntu,Playframework,Upstart,我们在播放1.2.7时使用的启动-停止守护程序的Upstart脚本现在无法停止/重新启动播放1.3后的播放,因为它的PID不正确 框架版本:Ubuntu 12.04.5 LTS上的1.3.0 复制步骤: 为播放应用程序设置upstart脚本(playframework.conf) 服务器重新启动时播放应用程序成功启动运行“sudo” 状态“playframework”将返回playframework启动/运行, 进程28912-此时进程28912不存在 vi{playapplicationfo

我们在播放1.2.7时使用的启动-停止守护程序的Upstart脚本现在无法停止/重新启动播放1.3后的播放,因为它的PID不正确

框架版本:Ubuntu 12.04.5 LTS上的1.3.0

复制步骤:

  • 为播放应用程序设置upstart脚本(playframework.conf)
  • 服务器重新启动时播放应用程序成功启动运行“sudo” 状态“playframework”将返回playframework启动/运行, 进程28912-此时进程28912不存在
  • vi{playapplicationfolder}/server.pid显示28927
  • “停止播放框架” 然后由于pid 28912“状态播放框架”结果未知而失败 playframework停止/终止,进程28912
在这一点之后重新启动play framework的唯一方法是找到实际进程并杀死它,然后使用通常的“play start”命令手动启动play。或者重新启动服务器

这已经破坏了我们的部署脚本,因为我们现在习惯于安装新版本的应用程序,然后在重新连接到负载平衡器之前重新启动

Upstart脚本: 我们已经尝试在start-stop守护进程中按照指定PID文件:但是这似乎也没有任何效果

我在类似的问题上找到了一些线索,但到目前为止还没有找到解决办法。我曾尝试将fork改为daemon,但同样的问题仍然存在。我也看不出在游戏1.2.7和1.3之间发生了什么变化导致了这种情况


另一篇SO帖子也问了一个类似的问题,但还没有得到答案:

这是因为
getJavaVersion()
生成了一个子进程,它会影响PID计数,从而破坏Upstart,后者希望Play完全不分叉,一次或两次,具体取决于您使用的expect节


我已经解决了一个。

同样的问题。从阅读上看,它似乎与启动时播放生成的子进程的数量有关。。。我在Play Google Group上发布了相同的问题,其中有一个链接描述了Upstart可能出了什么问题,但遗憾的是,没有关于如何修复它的详细说明。在您尝试修复它时,有一个临时的解决方法可以让Upstart再次进入可用状态。此脚本:将为upstart创建一个新的流程来恢复自身。我查看了pull请求和其他提交人的评论,我认为它们是有效的-您的PR解决了这个特定问题,但会导致其他问题。是的,问题是针对那些运行与application.conf的
Java.source
中所述版本不同的Java版本的人。PR被修改为接受一个标志,现在已经被合并。
#Upstart script for a play application that binds to an unprivileged user.
# put this into a file like /etc/init/playframework
# you can then start/stop it using either initctl or start/stop/restart
# e.g. 
# start playframework

description     "PlayApp"
author          "-----"
version         "1.0"

env PLAY_BINARY=/opt/play/play
env JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
env HOME=/opt/myapp/latest
env USER=ubuntu
env GROUP=admin
env PROFILE=prod

start on (filesystem and net-device-up IFACE=lo) or runlevel [2345]
stop on runlevel [!2345]

limit nofile 65536 65536
respawn
respawn limit 10 5
umask 022
expect fork


pre-start script
        test -x $PLAY_BINARY || { stop; exit 0; }
        test -c /dev/null || { stop; exit 0; }
        chdir ${HOME}
        rm ${HOME}/server.pid || true
        /opt/configurer.sh
end script

pre-stop script
        exec $PLAY_BINARY stop $HOME
end script

post-stop script
        rm ${HOME}/server.pid || true
end script

script
exec start-stop-daemon --start --exec $PLAY_BINARY --chuid $USER:$GROUP --chdir $HOME -- start $HOME -javaagent:/opt/newrelic/newrelic.jar --%$PROFILE -Dprecompiled=true --http.port=8080 --https.port=4443
end script