summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2015-08-27 16:56:43 +0000
committerDouwe Maan <douwe@gitlab.com>2015-08-27 16:56:43 +0000
commit10ee826847f956a235952fbb41d5ba589927b862 (patch)
tree477039f4f3d6c6153756b0357f9d6ea87b50496e
parent30555c1d24af25aca0c6e85f52234a8a570b7691 (diff)
parent1081a322f1b846fcddb3cb77f068e2e818f9d73f (diff)
downloadgitlab-ce-10ee826847f956a235952fbb41d5ba589927b862.tar.gz
Merge branch 'improve-mail_room-wrapper' into 'master'
Properly daemonize the mail_room process The old invocation only worked by accident because we have a '&' somewhere in the init script for expediency. When ran from a terminal, the mail_room daemon process ended up in the session of the terminal. This commit adds a small wrapper that tries to do the textbook daemonization steps (double fork, setsid etc.) while also taking care that the pidfile is written before the 'start' process exits. See merge request !1221
-rwxr-xr-xbin/daemon_with_pidfile33
-rwxr-xr-xbin/mail_room4
2 files changed, 34 insertions, 3 deletions
diff --git a/bin/daemon_with_pidfile b/bin/daemon_with_pidfile
new file mode 100755
index 00000000000..f138c27a0e2
--- /dev/null
+++ b/bin/daemon_with_pidfile
@@ -0,0 +1,33 @@
+#!/usr/bin/env ruby
+# daemon_with_pidfile
+#
+# Daemonize, write a pidfile, and exec the remainder of the command line.
+
+def main(pidfile, cmd)
+ if middle_pid = Process.fork
+ # outer process
+ # Do not exit the outer process before the middle process finishes
+ Process.waitpid(middle_pid)
+ exit $?.exitstatus
+ end
+
+ if final_pid = Process.fork
+ # middle process
+ open(pidfile, 'w') { |f| f.puts final_pid }
+ exit
+ end
+
+ # Standard daemon things: become session leader, ignore SIGHUP, close stdin.
+ Signal.trap("HUP", "IGNORE")
+ Process.setsid
+ IO.new(0).close
+
+ exec(*cmd)
+end
+
+if ARGV.count < 2
+ abort "Usage: #$0 pidfile command [args...]"
+end
+
+pidfile = ARGV.shift
+main(pidfile, ARGV)
diff --git a/bin/mail_room b/bin/mail_room
index f4f1a170c04..74a84f5b2b4 100755
--- a/bin/mail_room
+++ b/bin/mail_room
@@ -19,9 +19,7 @@ get_mail_room_pid()
start()
{
- bundle exec mail_room -q -c $mail_room_config >> $mail_room_logfile 2>&1 &
- PID=$!
- echo $PID > $mail_room_pidfile
+ bin/daemon_with_pidfile $mail_room_pidfile bundle exec mail_room -q -c $mail_room_config >> $mail_room_logfile 2>&1
}
stop()