Merge branch 'unicorn-pgrp-term' into 'master'
Cleaner 'gitlab-ctl stop' for unicorn and logrotate Both of these could leave a dangling 'sleep' process, especially logrotate. We use a Runit 'control' script to intercept SIGTERM and send it to the process group instead of the main process. Because we use chpst -P, the main process is a process group leader so this works. I had to stick the logrotate 'run' script in a wrapper for this to work. See merge request !428
This commit is contained in:
commit
b692b82445
|
@ -86,6 +86,7 @@ define :unicorn_service, :rails_app => nil, :user => nil do
|
|||
down node['gitlab'][svc]['ha']
|
||||
restart_command 2 # Restart Unicorn using SIGUSR2
|
||||
template_name 'unicorn'
|
||||
control ['t']
|
||||
options({
|
||||
:service => svc,
|
||||
:user => user,
|
||||
|
|
|
@ -46,6 +46,7 @@ end
|
|||
|
||||
runit_service "logrotate" do
|
||||
down node['gitlab']['logrotate']['ha']
|
||||
control ['t']
|
||||
options({
|
||||
:log_directory => logrotate_log_dir
|
||||
}.merge(params))
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/sh
|
||||
echo "Received TERM from runit, sending to process group (-PID)"
|
||||
kill -- -$(cat /opt/gitlab/service/logrotate/supervise/pid)
|
|
@ -3,10 +3,8 @@ exec 2>&1
|
|||
|
||||
cd <%= node['gitlab']['logrotate']['dir'] %>
|
||||
|
||||
# Sleep a bit to avoid going nuts after gitlab just started.
|
||||
sleep <%= node['gitlab']['logrotate']['pre_sleep'] %>
|
||||
|
||||
nice /opt/gitlab/embedded/sbin/logrotate -s /var/log/gitlab/logrotate/logrotate.status logrotate.conf
|
||||
|
||||
# Sleep some more. After this, the script exits to be restarted by Runit.
|
||||
sleep <%= node['gitlab']['logrotate']['post_sleep'] %>
|
||||
exec /opt/gitlab/embedded/bin/chpst -P /usr/bin/env \
|
||||
dir=<%= node['gitlab']['logrotate']['dir'] %> \
|
||||
pre_sleep=<%= node['gitlab']['logrotate']['pre_sleep'] %> \
|
||||
post_sleep=<%= node['gitlab']['logrotate']['post_sleep'] %> \
|
||||
/opt/gitlab/embedded/bin/gitlab-logrotate-wrapper
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/sh
|
||||
echo "Received TERM from runit, sending to process group (-PID)"
|
||||
kill -- -$(cat /opt/gitlab/service/<%= @options[:service] %>/supervise/pid)
|
|
@ -0,0 +1,26 @@
|
|||
#!/bin/sh
|
||||
|
||||
main()
|
||||
{
|
||||
assert_non_empty pre_sleep
|
||||
assert_non_empty post_sleep
|
||||
assert_non_empty dir
|
||||
|
||||
# Sleep a bit to avoid going nuts after gitlab just started.
|
||||
sleep ${pre_sleep}
|
||||
|
||||
nice /opt/gitlab/embedded/sbin/logrotate -s ${dir}/logrotate.status logrotate.conf
|
||||
|
||||
# Sleep some more. After this, the script exits to be restarted by Runit.
|
||||
sleep ${post_sleep}
|
||||
}
|
||||
|
||||
assert_non_empty()
|
||||
{
|
||||
if [ -z "$(eval echo \$$1)" ] ; then
|
||||
echo "$0 error: \$$1 is empty"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
main
|
Loading…
Reference in New Issue