From 6a7d63aa47d583a21b87b623a010d8b98abb8777 Mon Sep 17 00:00:00 2001 From: Jacob Vosmaer Date: Wed, 9 Oct 2013 16:45:32 +0200 Subject: [PATCH] Move unicorn and sidekiq commands into bash script --- lib/support/init.d/gitlab | 13 +++++------ lib/tasks/sidekiq.rake | 27 ++++++----------------- script/background_jobs | 56 +++++++++++++++++++++++++++++++++++++++++++++++ script/web | 49 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 118 insertions(+), 27 deletions(-) create mode 100755 script/background_jobs create mode 100755 script/web diff --git a/lib/support/init.d/gitlab b/lib/support/init.d/gitlab index f157d71b1..26ca50c22 100755 --- a/lib/support/init.d/gitlab +++ b/lib/support/init.d/gitlab @@ -22,7 +22,6 @@ RAILS_ENV="production" # /bin/sh variables such as PATH, EDITOR or SHELL. app_root="/home/git/gitlab" app_user="git" -unicorn_conf="$app_root/config/unicorn.rb" pid_path="$app_root/tmp/pids" socket_path="$app_root/tmp/sockets" web_server_pid_path="$pid_path/unicorn.pid" @@ -129,7 +128,7 @@ start() { # Remove old socket if it exists rm -f "$socket_path"/gitlab.socket 2>/dev/null # Start the webserver - bundle exec unicorn_rails -D -c "$unicorn_conf" -E "$RAILS_ENV" + RAILS_ENV=$RAILS_ENV script/web start fi # If sidekiq is already running, don't start it again. @@ -137,7 +136,7 @@ start() { echo "The Sidekiq job dispatcher is already running with pid $spid, not restarting" else echo "Starting the GitLab Sidekiq event dispatcher..." - RAILS_ENV=$RAILS_ENV bundle exec rake sidekiq:start + RAILS_ENV=$RAILS_ENV script/background_jobs start # We are sleeping a bit here because sidekiq is slow at writing it's pid sleep 2 fi @@ -151,7 +150,7 @@ stop() { exit_if_not_running # If the Unicorn web server is running, tell it to stop; if [ "$web_status" = "0" ]; then - kill -QUIT "$wpid" + RAILS_ENV=$RAILS_ENV script/web stop echo "Stopping the GitLab Unicorn web server..." stopping=true else @@ -160,7 +159,7 @@ stop() { # And do the same thing for the Sidekiq. if [ "$sidekiq_status" = "0" ]; then printf "Stopping Sidekiq job dispatcher." - RAILS_ENV=$RAILS_ENV bundle exec rake sidekiq:stop + RAILS_ENV=$RAILS_ENV script/background_jobs stop stopping=true else echo "The Sidekiq was not running, must have run out of breath." @@ -215,10 +214,10 @@ reload(){ exit 1 fi printf "Reloading GitLab Unicorn configuration... " - kill -USR2 "$wpid" + RAILS_ENV=$RAILS_ENV script/web reload echo "Done." echo "Restarting GitLab Sidekiq since it isn't capable of reloading its config..." - RAILS_ENV=$RAILS_ENV bundle exec rake sidekiq:restart + RAILS_ENV=$RAILS_ENV script/background_jobs restart # Waiting 2 seconds for sidekiq to write it. sleep 2 status diff --git a/lib/tasks/sidekiq.rake b/lib/tasks/sidekiq.rake index ba79b6e03..23d41f8ed 100644 --- a/lib/tasks/sidekiq.rake +++ b/lib/tasks/sidekiq.rake @@ -1,32 +1,19 @@ namespace :sidekiq do desc "GITLAB | Stop sidekiq" task :stop do - system "bundle exec sidekiqctl stop #{pidfile}" + system "script/background_jobs stop" end - desc "GITLAB | Start sidekiq" - task :start => :restart + desc "GITLAB | Start sidekiq" do + system "script/background_jobs start" + end - desc 'GitLab | Restart sidekiq' - task :restart do - if File.exist?(pidfile) - puts 'Shutting down existing sidekiq process.' - Rake::Task['sidekiq:stop'].invoke - puts 'Starting new sidekiq process.' - end - system "bundle exec sidekiq -q post_receive,mailer,system_hook,project_web_hook,gitlab_shell,common,default -e #{Rails.env} -P #{pidfile} -d -L #{log_file} >> #{log_file} 2>&1" + desc 'GitLab | Restart sidekiq' do + system "script/background_jobs restart" end desc "GITLAB | Start sidekiq with launchd on Mac OS X" task :launchd do - system "bundle exec sidekiq -q post_receive,mailer,system_hook,project_web_hook,gitlab_shell,common,default -e #{Rails.env} -P #{pidfile} >> #{log_file} 2>&1" - end - - def pidfile - Rails.root.join("tmp", "pids", "sidekiq.pid") - end - - def log_file - Rails.root.join("log", "sidekiq.log") + system "script/background_jobs start_no_deamonize" end end diff --git a/script/background_jobs b/script/background_jobs new file mode 100755 index 000000000..e0beb3df8 --- /dev/null +++ b/script/background_jobs @@ -0,0 +1,56 @@ +#!/bin/bash + +cd $(dirname $0)/.. +app_root=$(pwd) +sidekiq_pidfile="$app_root/tmp/pids/sidekiq.pid" +sidekiq_logfile="$app_root/log/sidekiq.log" +gitlab_user=$(ls -l config.ru | awk '{print $3}') + +function stop +{ + bundle exec sidekiqctl stop $sidekiq_pidfile &>> $sidekiq_logfile +} + +function killall +{ + pkill -u $gitlab_user -f sidekiq +} + +function restart +{ + if [ -f $sidekiq_pidfile ]; then + stop + fi + killall + start_sidekiq -d -L $sidekiq_logfile +} + +function start_no_deamonize +{ + start_sidekiq +} + +function start_sidekiq +{ + bundle exec sidekiq -q post_receive,mailer,system_hook,project_web_hook,gitlab_shell,common,default -e $RAILS_ENV -P $sidekiq_pidfile $@ &>> $sidekiq_logfile +} + +case "$1" in + stop) + stop + ;; + start) + restart + ;; + start_no_deamonize) + start_no_deamonize + ;; + restart) + restart + ;; + killall) + killall + ;; + *) + echo "Usage: RAILS_ENV=your_env $0 {stop|start|start_no_deamonize|restart|killall}" +esac diff --git a/script/web b/script/web new file mode 100755 index 000000000..5464ed040 --- /dev/null +++ b/script/web @@ -0,0 +1,49 @@ +#!/bin/bash + +cd $(dirname $0)/.. +app_root=$(pwd) + +unicorn_pidfile="$app_root/tmp/pids/unicorn.pid" +unicorn_config="$app_root/config/unicorn.rb" + +function get_unicorn_pid +{ + local pid=$(cat $unicorn_pidfile) + if [ -z $pid ] ; then + echo "Could not find a PID in $unicorn_pidfile" + exit 1 + fi + unicorn_pid=$pid +} + +function start +{ + bundle exec unicorn_rails -D -c $unicorn_config -E $RAILS_ENV +} + +function stop +{ + get_unicorn_pid + kill -QUIT $unicorn_pid +} + +function reload +{ + get_unicorn_pid + kill -USR2 $unicorn_pid +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + reload) + reload + ;; + *) + echo "Usage: RAILS_ENV=your_env $0 {start|stop|reload}" + ;; +esac -- 2.11.0