|
@@ -1,27 +1,18 @@
|
|
|
#!/usr/bin/env ruby
|
|
|
# Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
|
|
|
+begin
|
|
|
+ load File.expand_path('../bin/spring', __dir__)
|
|
|
+rescue LoadError => e
|
|
|
+ raise unless e.message.include?('spring')
|
|
|
+end
|
|
|
|
|
|
-$LOAD_PATH << './lib'
|
|
|
-require 'rubygems'
|
|
|
-
|
|
|
-# load rails env
|
|
|
dir = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
|
|
Dir.chdir dir
|
|
|
-RAILS_ENV = ENV['RAILS_ENV'] || 'development'
|
|
|
|
|
|
-require 'rails/all'
|
|
|
require 'bundler'
|
|
|
-require File.join(dir, 'config', 'environment')
|
|
|
require 'daemons'
|
|
|
|
|
|
def before_fork
|
|
|
-
|
|
|
- # clear all connections before for, reconnect later ActiveRecord::Base.connection.reconnect!
|
|
|
- # issue #1405 - Scheduler not running because of Bad file descriptor in PGConsumeInput()
|
|
|
- # https://github.com/zammad/zammad/issues/1405
|
|
|
- # see also https://bitbucket.org/ged/ruby-pg/issues/260/frequent-crashes-with-multithreading
|
|
|
- ActiveRecord::Base.clear_all_connections!
|
|
|
-
|
|
|
# remember open file handles
|
|
|
@files_to_reopen = []
|
|
|
ObjectSpace.each_object(File) do |file|
|
|
@@ -38,6 +29,15 @@ def after_fork(dir)
|
|
|
file.sync = true
|
|
|
end
|
|
|
|
|
|
+ # Spring redirects STDOUT and STDERR to /dev/null
|
|
|
+ # before we get here. This causes the `reopen` lines
|
|
|
+ # below to fail because the handles are already
|
|
|
+ # opened for write
|
|
|
+ if defined?(Spring)
|
|
|
+ $stdout.close
|
|
|
+ $stderr.close
|
|
|
+ end
|
|
|
+
|
|
|
$stdout.reopen("#{dir}/log/scheduler_out.log", 'w')
|
|
|
$stderr.reopen("#{dir}/log/scheduler_err.log", 'w')
|
|
|
end
|
|
@@ -45,29 +45,22 @@ end
|
|
|
before_fork
|
|
|
|
|
|
daemon_options = {
|
|
|
- multiple: false,
|
|
|
- dir_mode: :normal,
|
|
|
- dir: File.join(dir, 'tmp', 'pids'),
|
|
|
+ multiple: false,
|
|
|
+ dir_mode: :normal,
|
|
|
+ dir: File.join(dir, 'tmp', 'pids'),
|
|
|
backtrace: true
|
|
|
}
|
|
|
|
|
|
-name = 'scheduler'
|
|
|
-Daemons.run_proc(name, daemon_options) do
|
|
|
-
|
|
|
- if ARGV.include?('--')
|
|
|
- ARGV.slice! 0..ARGV.index('--')
|
|
|
- else
|
|
|
- ARGV.clear
|
|
|
- end
|
|
|
+Daemons.run_proc('scheduler', daemon_options) do
|
|
|
|
|
|
after_fork(dir)
|
|
|
|
|
|
- Rails.logger.info 'Scheduler started.'
|
|
|
+ require File.join(dir, 'config', 'environment')
|
|
|
|
|
|
+ Rails.logger.info 'Scheduler started.'
|
|
|
at_exit do
|
|
|
Rails.logger.info 'Scheduler stopped.'
|
|
|
end
|
|
|
|
|
|
- require 'scheduler'
|
|
|
Scheduler.threads
|
|
|
end
|