【问题标题】:How can I add process parameters using sbt-native-packager?如何使用 sbt-native-packager 添加工艺参数?
【发布时间】:2017-01-25 14:12:01
【问题描述】:

如何使用 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 中有错误。

我的插件.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"

ps 我找到了一个解决方法,在 ubuntu 16.04 中我可以使用 journald 来收集系统中的所有日志。

【问题讨论】:

  • 您能提供一些上下文吗?启用了哪些插件,您使用的是哪个版本,您正在构建什么包格式以及您配置了哪个系统加载器(如果有)?
  • @Muki,完成。如有必要,请告诉我们缺少的内容。

标签: sbt sbt-native-packager


【解决方案1】:

感谢您使用所有相关信息更新问题。这里有几件事。

只有一个 Systemloader 插件

您启用SystemdPluginUpstartPlugin。如果它有效,它只会在偶然的情况下有效。没有任何版本的 native-packager 旨在支持单个构建模块中单个包类型的多个系统加载器。

解决方案是创建启用相关系统加载器的子模块。

记录到标准错误

关于systemd,你是对的。它提供了捕获进程日志输出的工具。如果您愿意,可以将您的发现添加到本机打包程序文档中(有一个 systemd plugin section)。

native-packager 中的upstart 支持相当简单。由于 Ubuntu 正在切换到 systemd,因此没有很多请求,您可以随时回退到 systemv。这让我找到了解决您问题的方法。

您可以使用SystemVPlugin,它支持daemon_log_filesystemv documentation 为您提供必要的详细信息。

干杯, 渚

【讨论】:

  • 所有答案归结为一个事实,即现在您无法自定义流程的参数。可能需要添加此功能?
  • 如果您可以为 Upstart 提供此功能,我们将接受拉取请求。但是由于 upstart 基本上被 systemd 取代了,我们不会自己添加它。
猜你喜欢
  • 2016-07-27
  • 2014-01-02
  • 2016-08-17
  • 2016-12-14
  • 2015-02-16
  • 2017-07-10
  • 2020-11-07
  • 2013-12-29
  • 2015-03-20
相关资源
最近更新 更多