79 lines
1.6 KiB
Ruby
Executable file
79 lines
1.6 KiB
Ruby
Executable file
#!/usr/bin/env ruby
|
|
# Copyright (C) 2012-2021 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
|