OSDN Git Service

Move unicorn and sidekiq commands into bash script
authorJacob Vosmaer <contact@jacobvosmaer.nl>
Wed, 9 Oct 2013 14:45:32 +0000 (16:45 +0200)
committerJacob Vosmaer <contact@jacobvosmaer.nl>
Tue, 15 Oct 2013 20:48:57 +0000 (22:48 +0200)
lib/support/init.d/gitlab
lib/tasks/sidekiq.rake
script/background_jobs [new file with mode: 0755]
script/web [new file with mode: 0755]

index f157d71..26ca50c 100755 (executable)
@@ -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
index ba79b6e..23d41f8 100644 (file)
@@ -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 (executable)
index 0000000..e0beb3d
--- /dev/null
@@ -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 (executable)
index 0000000..5464ed0
--- /dev/null
@@ -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