Playframework 2.0 当尝试作为服务启动时,生成的RPM在Centos上产生ENOTTY错误

Playframework 2.0 当尝试作为服务启动时,生成的RPM在Centos上产生ENOTTY错误,playframework-2.0,sbt-native-packager,Playframework 2.0,Sbt Native Packager,我已经使用Play2框架创建了一个小应用程序,并尝试生成一个RPM包,以便从该包部署到centos服务器。我已将sbt本机打包程序的当前版本添加到我的plugins.sbt: addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "0.7.1") 在我的build.sbt中,我放置了以下内容: packageArchetype.java_server packageDescription := "Custom application

我已经使用Play2框架创建了一个小应用程序,并尝试生成一个RPM包,以便从该包部署到centos服务器。我已将sbt本机打包程序的当前版本添加到我的plugins.sbt:

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "0.7.1")
在我的build.sbt中,我放置了以下内容:

packageArchetype.java_server
packageDescription := "Custom application configuration"
maintainer in Linux := "Sönke"
packageSummary in Linux := "Ansible Callback Server"
rpmVendor in Rpm := "Sönke"
rpmLicense in Rpm := Some("BSD")
然后我运行了ActivatorRPM:packageBin,它生成了一个有效的rpm包,我可以安装它

现在的问题是,当我直接从命令行启动程序时,一切正常,但当我启动服务以使其在后台运行时,它失败了

在花了一些时间研究strace输出后,我认为问题在于以下几行:

8843  <... wait4 resumed> [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], WSTOPPED, NULL) = 8845
8843  socket(PF_NETLINK, SOCK_RAW, 9)   = 4
8843  fcntl(4, F_SETFD, FD_CLOEXEC)     = 0
8843  readlink("/proc/self/exe", "/sbin/runuser", 4096) = 13
8843  ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff3df6d5d0) = -1 ENOTTY (Inappropriate ioctl for device)
8843  ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff3df6d5d0) = -1 ENOTTY (Inappropriate ioctl for device)
8843  ioctl(2, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff3df6d5d0) = -1 ENOTTY (Inappropriate ioctl for device)
8843  sendto(4, "p\0\0\0P\4\5\0\3\0\0\0\0\0\0\0op=PAM:setcred a"..., 112, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 112
8843  poll([{fd=4, events=POLLIN}], 1, 500) = 1 ([{fd=4, revents=POLLIN}])
8843  recvfrom(4, "$\0\0\0\2\0\0\0\3\0\0\0\213\"\0\0\0\0\0\0p\0\0\0P\4\5\0\3\0\0\0"..., 8988, MSG_PEEK|MSG_DONTWAIT, {sa_family=AF_NETLINK, pid=0, groups=00000000}, [12]) = 36
8843  recvfrom(4, "$\0\0\0\2\0\0\0\3\0\0\0\213\"\0\0\0\0\0\0p\0\0\0P\4\5\0\3\0\0\0"..., 8988, MSG_DONTWAIT, {sa_family=AF_NETLINK, pid=0, groups=00000000}, [12]) = 36
8843  close(4)                          = 0
8843  getuid()                          = 0
8843  sendto(3, "<86>Jun 14 13:41:01 runuser: pam"..., 92, MSG_NOSIGNAL, NULL, 0) = 92
8843  socket(PF_NETLINK, SOCK_RAW, 9)   = 4
8843  fcntl(4, F_SETFD, FD_CLOEXEC)     = 0
8843  readlink("/proc/self/exe", "/sbin/runuser", 4096) = 13
8843  ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff3df6d5d0) = -1 ENOTTY (Inappropriate ioctl for device)
8843  ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff3df6d5d0) = -1 ENOTTY (Inappropriate ioctl for device)
8843  ioctl(2, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff3df6d5d0) = -1 ENOTTY (Inappropriate ioctl for device)
8843  sendto(4, "x\0\0\0R\4\5\0\4\0\0\0\0\0\0\0op=PAM:session_c"..., 120, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 120
8843  poll([{fd=4, events=POLLIN}], 1, 500) = 1 ([{fd=4, revents=POLLIN}])
8843  recvfrom(4, "$\0\0\0\2\0\0\0\4\0\0\0\213\"\0\0\0\0\0\0x\0\0\0R\4\5\0\4\0\0\0"..., 8988, MSG_PEEK|MSG_DONTWAIT, {sa_family=AF_NETLINK, pid=0, groups=00000000}, [12]) = 36
8843  recvfrom(4, "$\0\0\0\2\0\0\0\4\0\0\0\213\"\0\0\0\0\0\0x\0\0\0R\4\5\0\4\0\0\0"..., 8988, MSG_DONTWAIT, {sa_family=AF_NETLINK, pid=0, groups=00000000}, [12]) = 36
8843  close(4)                          = 0
8843[{WIFEXITED(s)和&WEXITSTATUS==1}],WSTOPPED,NULL)=8845
8843插座(PF_NETLINK,插座_RAW,9)=4
8843 fcntl(4,F_SETFD,FD_CLOEXEC)=0
8843读链接(“/proc/self/exe”,“/sbin/runuser”,4096)=13
8843 ioctl(0,SNDCTL\u TMR\u时基或TCGETS,0x7fff3df6d5d0)=-1 ENOTTY(设备的ioctl不适当)
8843 ioctl(1,SNDCTL\u TMR\u时基或TCGETS,0x7fff3df6d5d0)=-1 ENOTTY(设备的ioctl不适当)
8843 ioctl(2,SNDCTL\u TMR\u时基或TCGETS,0x7fff3df6d5d0)=-1 ENOTTY(设备的ioctl不适当)
8843 sendto(4,“p\0\0\0P\4\5\0\3\0\0\0\0\0op=PAM:setcred a”…,112,0,{sa_family=AF_NETLINK,pid=0,groups=00000000},12)=112
8843 poll([{fd=4,events=POLLIN}],1500)=1([{fd=4,revents=POLLIN}])
8843从(4,“$\0\0\0\2\0\0\0\0\3\0\0\0\213\”\0\0\0\0\0\0\0\p\4\5\0\3\0\0\0”…,8988,MSG|PEEK | MSG| DONTWAIT,{sa_family=AF\u NETLINK,pid=0,groups=00000000},[12])=36
8843 recvfrom(4,“$\0\0\0\2\0\0\0\0\3\0\0\0\213\”\0\0\0\0\0\0\0\p\4\5\0\3\0\0\0”…,8988,MSG_DONTWAIT,{sa_family=AF\u NETLINK,pid=0,groups=00000000},[12])=36
8843关闭(4)=0
8843 getuid()=0
8843 sendto(3,“Jun 14 13:41:01 runuser:pam”…,92,MSG_NOSIGNAL,NULL,0)=92
8843插座(PF_NETLINK,插座_RAW,9)=4
8843 fcntl(4,F_SETFD,FD_CLOEXEC)=0
8843读链接(“/proc/self/exe”,“/sbin/runuser”,4096)=13
8843 ioctl(0,SNDCTL\u TMR\u时基或TCGETS,0x7fff3df6d5d0)=-1 ENOTTY(设备的ioctl不适当)
8843 ioctl(1,SNDCTL\u TMR\u时基或TCGETS,0x7fff3df6d5d0)=-1 ENOTTY(设备的ioctl不适当)
8843 ioctl(2,SNDCTL\u TMR\u时基或TCGETS,0x7fff3df6d5d0)=-1 ENOTTY(设备的ioctl不适当)
8843 sendto(4,“x\0\0\0R\4\5\0\4\0\0\0\0\0op=PAM:session_c”…,120,0,{sa_family=AF_NETLINK,pid=0,groups=00000000},12)=120
8843 poll([{fd=4,events=POLLIN}],1500)=1([{fd=4,revents=POLLIN}])
8843 recvfrom(4,“$\0\0\0\0\2\0\0\0\0\4\0\0\0\0\0\0\0\r\4\5\0\4\0\0\0\0”…,8988,MSG|PEEK | MSG| DONTWAIT,{sa_family=AF_NETLINK,pid=0,groups=00000000},[12=36]
8843 recvfrom(4,“$\0\0\0\2\0\0\0\0\4\0\0\0\213\”\0\0\0\0\0\0\0\r\4\5\0\4\0\0\0\0”…,8988,MSG_DONTWAIT,{sau family=AF\u NETLINK,pid=0,groups=00000000},[12])=36
8843关闭(4)=0
从我(有限的)理解来看,程序似乎试图在这里做一些需要tty的事情,但由于它在没有tty的情况下运行,因此会失败,然后进程退出。
我已经搜索了github的问题并用谷歌搜索了一下,但似乎找不到任何关于这方面的信息,这对我来说意味着我在这里做错了什么,但我不知道这到底是什么

问题显然是,play应用程序会创建自己的pid文件,默认情况下,该文件位于工作目录中,这会产生问题

解决方案是取消注释/etc/default/{progname}中的以下行

-Dpidfile.path=/var/run/provisionist/play.pid
我太蠢了,找不到