我正在使用sbt native packager("com.typesafe.sbt" % "sbt-native-packager" % "1.0.0"
)创建我的Scala Play 2.3.8应用程序的debian包。正在生成的启动脚本使用自定义用户来启动和停止应用程序,这完全符合预期。
问题是,使用dpkg -i package.deb
的安装似乎在以root用户身份安装后直接启动应用程序。然后,/var/run/neeedo-app/running.pid
由root用户拥有,并且所有进一步的停止或启动尝试都会失败,因为该文件不能被守护程序用户覆盖。
这是我的build.sbt:
import com.typesafe.sbt.SbtNativePackager._
import NativePackagerKeys._
import com.typesafe.sbt.packager.archetypes.ServerLoader.SystemV
name := """neeedo-api"""
version := "1.0-SNAPSHOT"
scalaVersion := "2.11.1"
maintainer in Debian := "neeedo-team <neeedo@neeedo.com>"
packageSummary in Debian := "neeedo api application"
serverLoading in Debian := SystemV
packageDescription := "neeedo api application"
daemonUser in Linux := neeedo-api
daemonGroup in Linux := neeedo-api
我也在使用neeedo-app用户运行dpkg install命令。我不明白为什么在安装后root用户创建了running.pid文件。如果我用sudo手动删除文件并使用启动/停止脚本后缀,一切正常......
编辑(答案): 似乎以root身份启动应用程序(使用dpkg)并不是真正的问题。 running.pid文件位于app用户拥有的目录中。因此,它可以编辑和删除pid文件。
我的应用程序在其配置中使用环境变量,当您以root用户身份运行sudo作为启动脚本时,您有不同的环境变量。这导致应用程序无法启动,不幸的是没有错误报告可见(我必须进一步调查,看看为什么,因为通常应该报告)。