Play frameworkのpidファイル「RUNNING_PID」ファイルの場所を変える(v2.0.4以降)
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]
という感じに指定します。