如何使用sbt-native-packager配置添加过程参数?我想添加用于将进程stderr重定向到文件的选项?要得到这样的结果:sudo -u app bash -c "app >>/var/log/app/stderr.log 2>&1"
我使用sbt-native-packager 1.2.0-M5来构建deb包,并在日志中使用JavaServerAppPackaging, JDebPackaging, SystemdPlugin, UpstartPlugin,仅在stderr中。另外,我必须在崩溃后手动删除应用程序pid,如果它存在,那么我在stderr中有错误。
我的plugins.sbt:
resolvers += Resolver.bintrayRepo("sbt", "sbt-plugin-releases")
// The Play plugin
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.8-netty-4.1")
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.2.0-M5")
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.8.2")
addSbtPlugin("com.lightbend.sbt" % "sbt-javaagent" % "0.1.1")
libraryDependencies += "org.vafer" % "jdeb" % "1.3" artifacts (Artifact("jdeb", "jar", "jar"))我的build.sbt:
...
debianPackageDependencies in Debian ++= Seq("postgresql-9.5 (>= 9.5.1)")
lazy val root = (project in file(".")).enablePlugins(PlayScala, JavaAgent)
scalaVersion := "2.11.8"
val akkaVersion = "2.4.10"
libraryDependencies ++= Seq(
"org.postgresql" % "postgresql" % "9.4.1208",
"org.scalikejdbc" %% "scalikejdbc" % "2.4.0",
"org.scalikejdbc" %% "scalikejdbc-config" % "2.4.0",
"org.scalikejdbc" %% "scalikejdbc-play-initializer" % "2.5.1",
"org.flywaydb" %% "flyway-play" % "3.0.1",
"com.typesafe.akka" %% "akka-contrib" % akkaVersion,
"com.typesafe.akka" %% "akka-slf4j" % akkaVersion,
"io.dropwizard.metrics" % "metrics-core" % "3.1.2",
"io.dropwizard.metrics" % "metrics-jvm" % "3.1.2",
"org.coursera" % "dropwizard-metrics-datadog" % "1.1.4",
"com.typesafe.akka" %% "akka-testkit" % akkaVersion % Test,
"com.relayrides" % "pushy" % "0.8",
"com.relayrides" % "pushy-dropwizard-metrics-listener" % "0.8",
"org.eclipse.jetty.alpn" % "alpn-api" % "1.1.3.v20160715" % "runtime",
ws,
specs2 % Test
)
resolvers += "Typesafe Releases" at "http://repo.typesafe.com/typesafe/maven-releases/"
resolvers += Resolver.mavenLocal
routesGenerator := InjectedRoutesGenerator
javaOptions in Test ++= Seq("-Dlogger.resource=logback-test.xml")
scalacOptions in Universal ++= Seq("-unchecked", "-deprecation", "-notailcalls")
javaOptions in Universal ++= Seq(
"-J-server",
...
)
...
import com.typesafe.sbt.packager.archetypes.systemloader._
// UpstartPlugin for ubuntu 14.04, SystemdPlugin for ubuntu 16.04
enablePlugins(JavaServerAppPackaging, JDebPackaging, SystemdPlugin, UpstartPlugin)
requiredStartFacilities := Some("datadog-agent.service, systemd-journald.service, postgresql.service")
javaAgents += "org.mortbay.jetty.alpn" % "jetty-alpn-agent" % "2.0.4" % "dist"另外,我发现了一个变通方法,在ubuntu 16.04中,我可以使用日志来收集系统中的所有日志。
发布于 2016-09-21 16:06:06
感谢您使用所有相关信息更新问题。这里有几件事。
只有一个Systemloader插件
您可以启用SystemdPlugin和UpstartPlugin。如果它能工作,它只能在偶然的情况下工作。没有本机打包程序的版本被设计为在单个构建模块中支持单个包类型的多个系统加载器。
解决方案是创建启用了相关系统加载器的子模块。
记录到stderr
你对systemd的看法是对的。它提供了一些工具来捕获流程的日志输出。如果您愿意,可以将您的发现添加到本机打包程序文档中(有一个systemd plugin section )。
本机打包程序中对upstart的支持非常简单。由于Ubuntu正在切换到systemd,所以没有太多的requeset,你可以随时退回到systemv。这给我带来了你的问题的解决方案。
您可以使用支持daemon_log_file的SystemVPlugin。systemv documentation为您提供了必要的详细信息。
干杯,Muki
https://stackoverflow.com/questions/39546885
复制相似问题