Skip to content

Commit cdc207e

Browse files
committed
Merge pull request #772 from kardapoltsev/wip/stdout-log-file
daemonStdoutLogFile setting implemented
2 parents b61cc0c + 5d3edaa commit cdc207e

File tree

12 files changed

+58
-13
lines changed

12 files changed

+58
-13
lines changed

src/main/resources/com/typesafe/sbt/packager/archetypes/java_server/systemloader/systemv/start-debian-template

+8-2
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,16 @@ RUN_CMD="${{chdir}}/bin/${{exec}}"
4141
start_daemon() {
4242
log_daemon_msg "Starting" "${{app_name}}"
4343
[ -d "/var/run/${{app_name}}" ] || install -d -o "$DAEMON_USER" -g "$DAEMON_GROUP" -m755 "/var/run/${{app_name}}"
44+
logfile="${{daemon_log_file}}"
45+
stdout_redirect=""
46+
if [ ! -z "${logfile:-}"]; then
47+
stdout_redirect=" >> ${{logdir}}/${{app_name}}/$logfile 2>&1"
48+
if
49+
4450
if [ "$create_pidfile" = true ]; then
45-
start-stop-daemon --background --chdir ${{chdir}} --chuid "$DAEMON_USER" --make-pidfile --pidfile "$PIDFILE" --startas "$RUN_CMD" --start -- $RUN_OPTS
51+
start-stop-daemon --background --chdir ${{chdir}} --chuid "$DAEMON_USER" --make-pidfile --pidfile "$PIDFILE" --startas "$RUN_CMD" --start -- $RUN_OPTS "$stdout_redirect"
4652
else
47-
start-stop-daemon --background --chdir ${{chdir}} --chuid "$DAEMON_USER" --pidfile "$PIDFILE" --startas "$RUN_CMD" --start -- $RUN_OPTS
53+
start-stop-daemon --background --chdir ${{chdir}} --chuid "$DAEMON_USER" --pidfile "$PIDFILE" --startas "$RUN_CMD" --start -- $RUN_OPTS "$stdout_redirect"
4854
fi
4955
log_end_msg $?
5056
}

src/main/resources/com/typesafe/sbt/packager/archetypes/java_server/systemloader/systemv/start-rpm-template

+6-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,12 @@ exec="$INSTALL_DIR/bin/${{exec}}"
4444
prog="${{app_name}}"
4545
lockfile="/var/lock/subsys/${{app_name}}"
4646

47-
RUN_CMD="$exec >> ${{logdir}}/${{app_name}}/${{rpm_daemon_log_file}} 2>&1 &"
47+
logfile="${{daemon_log_file}}"
48+
if [ -z "${logfile:-}" ]; then
49+
RUN_CMD="$exec &"
50+
else
51+
RUN_CMD="$exec >> ${{logdir}}/${{app_name}}/$logfile 2>&1 &"
52+
fi
4853

4954
# $JAVA_OPTS used in $exec wrapper
5055
export JAVA_OPTS

src/main/scala/com/typesafe/sbt/packager/Keys.scala

+1
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,4 @@ object Keys extends NativePackagerKeys
4848
with debian.DebianKeys
4949
with rpm.RpmKeys
5050
with archetypes.JavaAppKeys
51+
with archetypes.JavaServerAppKeys
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.typesafe.sbt.packager.archetypes
2+
3+
import sbt._
4+
5+
/**
6+
* Available settings/tasks for the [[com.typesafe.sbt.packager.archetypes.JavaServerAppPackaging]]
7+
*/
8+
trait JavaServerAppKeys {
9+
10+
val daemonStdoutLogFile = SettingKey[Option[String]]("daemon-stdout-log-file", "Filename for redirecting stdout/stderr output from daemon")
11+
12+
}

src/main/scala/com/typesafe/sbt/packager/archetypes/JavaServerApplication.scala

+12-4
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,13 @@ package archetypes
55
import sbt._
66
import sbt.Keys.{ target, mainClass, sourceDirectory, streams, javaOptions, run }
77
import SbtNativePackager.{ Debian, Rpm, Universal }
8-
import packager.Keys.{ packageName, maintainerScripts }
8+
import packager.Keys.{ packageName, maintainerScripts, daemonStdoutLogFile }
99
import linux.{ LinuxFileMetaData, LinuxPackageMapping, LinuxSymlink, LinuxPlugin }
1010
import linux.LinuxPlugin.autoImport._
1111
import debian.DebianPlugin
1212
import debian.DebianPlugin.autoImport.{ debianMakePreinstScript, debianMakePostinstScript, debianMakePrermScript, debianMakePostrmScript }
1313
import rpm.RpmPlugin
1414
import rpm.RpmPlugin.autoImport.{ rpmPre, rpmPost, rpmPostun, rpmPreun, rpmScriptsDirectory, rpmDaemonLogFile, RpmConstants }
15-
import rpm.RpmPlugin.Names.RpmDaemonLogFileReplacement
1615
import JavaAppPackaging.autoImport.{ bashScriptConfigLocation, bashScriptEnvConfigLocation }
1716

1817
/**
@@ -28,8 +27,14 @@ object JavaServerAppPackaging extends AutoPlugin {
2827
import ServerLoader._
2928
import LinuxPlugin.Users
3029

30+
object Names {
31+
val DaemonStdoutLogFileReplacement = "daemon_log_file"
32+
}
33+
3134
override def requires = JavaAppPackaging
3235

36+
object autoImport extends JavaServerAppKeys
37+
3338
override def projectSettings = javaServerSettings
3439

3540
val ARCHETYPE = "java_server"
@@ -58,7 +63,9 @@ object JavaServerAppPackaging extends AutoPlugin {
5863
// === etc config mapping ===
5964
bashScriptEnvConfigLocation := Some("/etc/default/" + (packageName in Linux).value),
6065

61-
linuxStartScriptName := None
66+
linuxStartScriptName := None,
67+
68+
daemonStdoutLogFile := None
6269
)
6370

6471
/* etcDefaultConfig is dependent on serverLoading (systemd, systemv, etc.),
@@ -92,6 +99,7 @@ object JavaServerAppPackaging extends AutoPlugin {
9299
makeStartScriptReplacements,
93100
linuxScriptReplacements += JavaServerLoaderScript.loaderFunctionsReplacement(serverLoading.value, ARCHETYPE),
94101
linuxScriptReplacements ++= bashScriptEnvConfigLocation.value.map(ENV_CONFIG_REPLACEMENT -> _).toSeq,
102+
linuxScriptReplacements += Names.DaemonStdoutLogFileReplacement -> daemonStdoutLogFile.value.getOrElse(""),
95103

96104
linuxStartScriptTemplate <<= (serverLoading in Debian, sourceDirectory) map { (loader, srcDir) =>
97105
JavaServerLoaderScript(
@@ -143,7 +151,7 @@ object JavaServerAppPackaging extends AutoPlugin {
143151
makeStartScriptReplacements,
144152
linuxScriptReplacements += JavaServerLoaderScript.loaderFunctionsReplacement(serverLoading.value, ARCHETYPE),
145153
linuxScriptReplacements ++= bashScriptEnvConfigLocation.value.map(ENV_CONFIG_REPLACEMENT -> _).toSeq,
146-
linuxScriptReplacements ++= Seq((RpmDaemonLogFileReplacement, rpmDaemonLogFile.value)),
154+
linuxScriptReplacements += Names.DaemonStdoutLogFileReplacement -> daemonStdoutLogFile.value.getOrElse(""),
147155

148156
// === /var/run/app pid folder ===
149157
linuxPackageMappings <+= (packageName, daemonUser, daemonGroup) map { (name, user, group) =>

src/main/scala/com/typesafe/sbt/packager/rpm/Keys.scala

+1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ trait RpmKeys {
6969
// Building
7070
val rpmLint = TaskKey[Unit]("rpm-lint", "Runs rpmlint program against the genreated RPM, if available.")
7171

72+
@deprecated("Use daemonStdoutLogFile instead", "1.1.x")
7273
val rpmDaemonLogFile = SettingKey[String]("rpm-daemon-log-file", "Name of the log file generated by application daemon")
7374

7475
}

src/main/scala/com/typesafe/sbt/packager/rpm/RpmPlugin.scala

+1-3
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,6 @@ object RpmPlugin extends AutoPlugin {
5252
/** `posttrans` */
5353
val Posttrans = "posttrans"
5454

55-
// replacements
56-
val RpmDaemonLogFileReplacement = "rpm_daemon_log_file"
57-
5855
}
5956

6057
override def projectConfigurations: Seq[Configuration] = Seq(Rpm)
@@ -98,6 +95,7 @@ object RpmPlugin extends AutoPlugin {
9895
packageName in Rpm <<= packageName in Linux,
9996
executableScriptName in Rpm <<= executableScriptName in Linux,
10097
rpmDaemonLogFile := s"${(packageName in Linux).value}.log",
98+
daemonStdoutLogFile in Rpm := Some((rpmDaemonLogFile).value),
10199
// override the linux sourceDirectory setting
102100
sourceDirectory in Rpm <<= sourceDirectory
103101
) ++ inConfig(Rpm)(Seq(

src/sbt-test/debian/sysvinit-deb/build.sbt

+5
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ requiredStartFacilities := Some("$test-service")
2323

2424
requiredStartFacilities in Debian := Some("$test-deb-service")
2525

26+
daemonStdoutLogFile := Some("test.log")
27+
2628
TaskKey[Unit]("check-control-files") <<= (target, streams) map { (target, out) =>
2729
val header = "#!/bin/sh"
2830
val debian = target / "debian-test-0.1.0" / "DEBIAN"
@@ -42,6 +44,9 @@ TaskKey[Unit]("check-startup-script") <<= (target, streams) map { (target, out)
4244
assert(script.contains("# Default-Stop: 0 1 6"), "script doesn't contain Default-Stop header\n" + script)
4345
assert(script.contains("# Required-Start: $test-deb-service"), "script doesn't contain Required-Start header\n" + script)
4446
assert(script.contains("# Required-Stop: $remote_fs $syslog"), "script doesn't contain Required-Stop header\n" + script)
47+
assert(script.contains("""start-stop-daemon --background --chdir /usr/share/debian-test --chuid "$DAEMON_USER" --make-pidfile --pidfile "$PIDFILE" --startas "$RUN_CMD" --start -- $RUN_OPTS "$stdout_redirect"""), "script has wrong startup line\n" + script)
48+
assert(script.contains("""logfile="test.log"""") ,"script contains wrong log file for stdout\n" + script)
49+
4550
out.log.success("Successfully tested systemV start up script")
4651
()
4752
}

src/sbt-test/rpm/path-override-rpm/build.sbt

+3-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ rpmUrl := Some("http://github.com/sbt/sbt-native-packager")
2121

2222
rpmLicense := Some("BSD")
2323

24+
rpmGroup := Some("test-group")
25+
2426
defaultLinuxInstallLocation := "/opt/test"
2527

2628
defaultLinuxLogsLocation := "/opt/test/log"
@@ -34,7 +36,7 @@ TaskKey[Unit]("unzip") <<= (baseDirectory, packageBin in Rpm, streams) map { (ba
3436
TaskKey[Unit]("check-init-file") <<= (baseDirectory, streams) map { (target, out) =>
3537
val initd = IO.read(target / "etc" / "init.d" / "rpm-test")
3638
assert(initd contains "/opt/test/rpm-test", "defaultLinuxInstallLocation not overriden in init.d\n" + initd)
37-
assert(initd contains "/opt/test/log/rpm-test/rpm-test.log", "defaultLinuxLogsLocation not overriden in init.d\n" + initd)
39+
assert(initd contains "/opt/test/log/rpm-test/$logfile", "defaultLinuxLogsLocation not overriden in init.d\n" + initd)
3840
out.log.success("Successfully tested rpm-test file")
3941
()
4042
}

src/sbt-test/rpm/sysvinit-rpm/build.sbt

+3-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ rpmUrl := Some("http://github.com/sbt/sbt-native-packager")
1818

1919
rpmLicense := Some("BSD")
2020

21+
rpmGroup := Some("test-group")
22+
2123
rpmDaemonLogFile := "test.log"
2224

2325
mainClass in (Compile, run) := Some("com.example.MainApp")
@@ -38,7 +40,7 @@ TaskKey[Unit]("unzipAndCheck") <<= (baseDirectory, packageBin in Rpm, streams) m
3840
|[ -n "${PACKAGE_PREFIX}" ] && INSTALL_DIR="${PACKAGE_PREFIX}/rpm-test"
3941
|cd $INSTALL_DIR
4042
|""".stripMargin, "Ensuring application is running on the install directory is not present in \n" + startupScript)
41-
assert(startupScript contains """RUN_CMD="$exec >> /var/log/rpm-test/test.log 2>&1 &"""", "Setting key rpmDaemonLogFile not present in \n" + startupScript)
43+
assert(startupScript contains """logfile="test.log"""", "Setting key rpmDaemonLogFile not present in \n" + startupScript)
4244

4345
// TODO check symlinks
4446
()

src/sbt-test/rpm/test-executableScriptName/build.sbt

+3-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ rpmUrl := Some("http://github.com/sbt/sbt-native-packager")
2121

2222
rpmLicense := Some("BSD")
2323

24+
rpmGroup := Some("test-group")
25+
2426
TaskKey[Unit]("check-spec-file") <<= (target, streams) map { (target, out) =>
2527
val spec = IO.read(target / "rpm" / "SPECS" / "rpm-test.spec")
2628
assert(spec contains "%attr(0644,root,root) /usr/share/rpm-test/lib/rpm-test.rpm-test-0.1.0.jar", "Wrong installation path\n" + spec)
@@ -41,7 +43,7 @@ TaskKey[Unit]("unzip") <<= (packageBin in Rpm, streams) map { (rpmFile, streams)
4143
TaskKey[Unit]("checkStartupScript") <<= (target, streams) map { (target, out) =>
4244
val script = IO.read(file("etc/init.d/rpm-test"))
4345
assert(script contains "rpm-exec", "SystemV script didn't contain correct executable filename 'rpm-exec' \n" + script)
44-
assert(script contains """RUN_CMD="$exec >> /var/log/rpm-test/rpm-test.log 2>&1 &"""", "SystemV script didn't contain default daemon log filename 'rpm-test.log' \n" + script)
46+
assert(script contains """RUN_CMD="$exec >> /var/log/rpm-test/$logfile 2>&1 &"""", "SystemV script didn't contain default daemon log filename 'rpm-test.log' \n" + script)
4547
out.log.success("Successfully tested startup script start up script")
4648
()
4749
}

src/sphinx/archetypes/java_server/index.rst

+3
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ have sensible defaults.
6868
``requiredStopFacilities``
6969
Names of system services that should be provided at application stop
7070

71+
``daemonStdoutLogFile``
72+
Filename stdout/stderr of application daemon. Now it's supported only in SystemV
73+
7174

7275
Default Mappings
7376
================

0 commit comments

Comments
 (0)