123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #!/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 if e.message.exclude?('spring')
- end
- dir = File.expand_path(File.join(File.dirname(__FILE__), '..'))
- Dir.chdir dir
- require 'bundler'
- require 'daemons'
- def before_fork
- # remember open file handles
- @files_to_reopen = []
- ObjectSpace.each_object(File) do |file|
- @files_to_reopen << file if !file.closed?
- end
- end
- def after_fork(dir)
- Dir.chdir dir
- # Re-open file handles
- @files_to_reopen.each do |file|
- file.reopen file.path, 'a+'
- 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
- before_fork
- daemon_options = {
- multiple: false,
- dir_mode: :normal,
- dir: File.join(dir, 'tmp', 'pids'),
- backtrace: true
- }
- Daemons.run_proc('scheduler', daemon_options) do
- after_fork(dir)
- require File.join(dir, 'config', 'environment')
- Rails.logger.info 'Scheduler started.'
- at_exit do
- # use process title for stop log entry
- # if differs from default process title
- title = 'Scheduler'
- if $PROGRAM_NAME != 'scheduler.rb'
- title = $PROGRAM_NAME
- end
- Rails.logger.info "#{title} stopped."
- end
- begin
- Scheduler.threads
- rescue Interrupt
- nil
- end
- end
|