This file is indexed.

/usr/bin/clockworkd is in ruby-clockwork 1.2.0-3.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/usr/bin/ruby

STDERR.sync = STDOUT.sync = true

require 'clockwork'
require 'optparse'

begin
  require 'daemons'
rescue LoadError
  raise "You need to add gem 'daemons' to your Gemfile or Rubygems if you wish to use it."
end

@options = {
  :quiet => false,
  :pid_dir => File.expand_path("./tmp"),
  :log_output => false,
  :monitor => false,
  :file => File.expand_path("./clock.rb")
}

bin_basename = File.basename($0)

opts = OptionParser.new do |opts|
  opts.banner = "Usage: #{bin_basename} -c FILE [options] start|stop|restart|run"
  opts.separator ''
  opts.on_tail('-h', '--help', 'Show this message') do
    puts opts
    exit 1
  end
  opts.on("--pid-dir=DIR", "Alternate directory in which to store the process ids. Default is #{@options[:pid_dir]}.") do |dir|
    @options[:pid_dir] = dir
  end
  opts.on('-i', '--identifier=STR', 'An identifier for the process. Default is clock file name.') do |n|
    @options[:identifier] = n
  end
  opts.on('-l', '--log', "Redirect both STDOUT and STDERR to a logfile named #{bin_basename}[.<identifier>].output in the pid-file directory.") do
    @options[:log_output] = true
  end
  opts.on('--log-dir=DIR', 'A specific directory to put the log files into (default location is pid directory).') do | log_dir|
    @options[:log_dir] = File.expand_path(log_dir)
  end
  opts.on('-m', '--monitor', 'Start monitor process.') do
    @options[:monitor] = true
  end
  opts.on('-c', '--clock=FILE',"Clock .rb file. Default is #{@options[:file]}.") do |clock_file|
    @options[:file] = clock_file
    @options[:file] = "./#{@options[:file]}" unless @options[:file].match(/^[\/.]/)
    @options[:file] = File.expand_path(@options[:file])
  end
  opts.on('-d', '--dir=DIR', 'Directory to change to once the process starts') do |dir|
    @options[:current_dir] = File.expand_path(dir)
  end
end

@args = opts.parse!(ARGV)

def optparser_abort(opts,message)
  $stderr.puts message
  puts opts
  exit 1
end

optparser_abort opts, "ERROR: --clock=FILE is required." unless @options[:file]
optparser_abort opts, "ERROR: clock file #{@options[:file]} does not exist." unless File.exists?(@options[:file])
optparser_abort opts, "ERROR: File extension specified in --clock must be '.rb'" unless File.extname(@options[:file]) == ".rb"

@options[:identifier]  ||= "#{File.basename(@options[:file],'.*')}"
process_name = "#{bin_basename}.#{@options[:identifier]}"

@options[:log_dir] ||= @options[:pid_dir]

Dir.mkdir(@options[:pid_dir]) unless File.exists?(@options[:pid_dir])
Dir.mkdir(@options[:log_dir]) unless File.exists?(@options[:log_dir])

puts "#{process_name}: pid file: #{File.expand_path(File.join(@options[:pid_dir],process_name + '.pid'))}"

if @options[:log_output]
  puts "#{process_name}: output log file: #{File.expand_path(File.join(@options[:log_dir],process_name + '.output'))}"
else
  puts "#{process_name}: No output will be printed out (run with --log if needed)"
end

Daemons.run_proc(process_name, :dir => @options[:pid_dir], :dir_mode => :normal, :monitor => @options[:monitor], :log_dir => @options[:log_dir], :log_output => @options[:log_output], :ARGV => @args) do |*args|
  # daemons changes the current working directory to '/' when a new process is
  # forked. We change it back to the project root directory here.
  Dir.chdir(@options[:current_dir]) if @options[:current_dir]
  require @options[:file]

  Clockwork::run
end