From 9f575986d8021cfab87d1dd664517d4fbd4ea58a Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Mon, 9 Jan 2017 19:54:57 +0800 Subject: [PATCH] feat: support pid file. --- cmd/web.go | 10 ++++++++++ modules/setting/setting.go | 23 +++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/cmd/web.go b/cmd/web.go index bbf386d43..e698510aa 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -60,6 +60,11 @@ and it takes care of all the other things for you`, Value: "custom/conf/app.ini", Usage: "Custom configuration file path", }, + cli.StringFlag{ + Name: "pid, P", + Value: "custom/run/app.pid", + Usage: "Custom pid file path", + }, }, } @@ -156,6 +161,11 @@ func runWeb(ctx *cli.Context) error { if ctx.IsSet("config") { setting.CustomConf = ctx.String("config") } + + if ctx.IsSet("pid") { + setting.CustomPID = ctx.String("pid") + } + routers.GlobalInit() m := newMacaron() diff --git a/modules/setting/setting.go b/modules/setting/setting.go index 7b9cf43cb..7fd4cfc2f 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -392,6 +392,7 @@ var ( Cfg *ini.File CustomPath string // Custom directory path CustomConf string + CustomPID string ProdMode bool RunUser string IsWindows bool @@ -471,6 +472,22 @@ func IsRunUserMatchCurrentUser(runUser string) (string, bool) { return currentUser, runUser == currentUser } +func createPIDFile(pidPath string) { + currentPid := os.Getpid() + if err := os.MkdirAll(filepath.Dir(pidPath), os.ModePerm); err != nil { + log.Fatal(4, "Can't create PID folder on %s", err) + } + + file, err := os.Create(pidPath) + if err != nil { + log.Fatal(4, "Can't create PID file: %v", err) + } + defer file.Close() + if _, err := file.WriteString(strconv.FormatInt(int64(currentPid), 10)); err != nil { + log.Fatal(4, "Can'write PID information on %s", err) + } +} + // NewContext initializes configuration context. // NOTE: do not print any log except error. func NewContext() { @@ -498,6 +515,12 @@ please consider changing to GITEA_CUSTOM`) } } + if len(CustomPID) == 0 { + CustomPID = CustomPath + "/run/app.pid" + } + + createPIDFile(CustomPID) + if len(CustomConf) == 0 { CustomConf = CustomPath + "/conf/app.ini" }