Play frameworkのpidファイル「RUNNING_PID」ファイルの場所を変える(v2.0.4以降)

2013年6月6日

Play frameworkを本番環境にデプロイする場合に、PIDファイルを別の場所に置きたいなと思ったりします。

デフォルトだとプロジェクトディレクトリの直下にRUNNING_PIDというファイルが作成されます。

このRUNNING_PIDファイルを作る所のコードを確認すると

play.core.server.NettyServer

の中にあるようです。

[scala]
def createServer(applicationPath: File): Option[NettyServer] = {
// Manage RUNNING_PID file
java.lang.management.ManagementFactory.getRuntimeMXBean.getName.split(‘@’).headOption.map { pid =>
val pidFile = Option(System.getProperty("pidfile.path")).map(new File(_)).getOrElse(new File(applicationPath.getAbsolutePath, "RUNNING_PID"))

// The Logger is not initialized yet, we print the Process ID on STDOUT
println("Play server process ID is " + pid)

if (pidFile.getAbsolutePath != "/dev/null") {
if (pidFile.exists) {
println("This application is already running (Or delete "+ pidFile.getAbsolutePath +" file).")
System.exit(-1)
}

new FileOutputStream(pidFile).write(pid.getBytes)
Runtime.getRuntime.addShutdownHook(new Thread {
override def run {
pidFile.delete()
}
})
}
}
}
[/scala]

PIDファイルの場所をカスタマイズするには、pidfile.pathというオプションにPIDファイルのパスを指定すれば良いようです。

ということで、プロジェクトの起動パラメータとして
[text]-Dpidfile.path=/tmp/hogeproj.pid[/text]
という感じに指定します。