Commit 10ee8268 authored by Douwe Maan's avatar Douwe Maan

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
parents 30555c1d 1081a322
#!/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)
...@@ -19,9 +19,7 @@ get_mail_room_pid() ...@@ -19,9 +19,7 @@ get_mail_room_pid()
start() start()
{ {
bundle exec mail_room -q -c $mail_room_config >> $mail_room_logfile 2>&1 & bin/daemon_with_pidfile $mail_room_pidfile bundle exec mail_room -q -c $mail_room_config >> $mail_room_logfile 2>&1
PID=$!
echo $PID > $mail_room_pidfile
} }
stop() stop()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment