lobster 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +2 -2
- data/README.md +0 -3
- data/bin/lobster +3 -1
- data/bin/lobsterize +5 -2
- data/lib/lobster/configuration.rb +7 -2
- data/lib/lobster/job.rb +7 -6
- data/lib/lobster/job_list.rb +11 -5
- data/lib/lobster/service.rb +9 -4
- data/lib/lobster/version.rb +1 -1
- metadata +4 -4
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -43,9 +43,6 @@ Two environment variables are used (with defaults):
|
|
43
43
|
- `LOBSTER_ENV` is a variable used to handle different environments (default:
|
44
44
|
development)
|
45
45
|
|
46
|
-
You need write permission to `/var/run/lobster/` for pids, this path is
|
47
|
-
configurable.
|
48
|
-
|
49
46
|
- `lobster run` will run in the console
|
50
47
|
- or `lobster start` as a deamon
|
51
48
|
|
data/bin/lobster
CHANGED
@@ -13,7 +13,9 @@ config = Lobster::Configuration.new(lobster_dir, lobster_env)
|
|
13
13
|
#puts "Config: #{config}"
|
14
14
|
|
15
15
|
log_dir = config[:log_dir]
|
16
|
-
|
16
|
+
pid_dir = config[:pid_dir]
|
17
|
+
Dir.mkdir log_dir unless Dir.exist?(log_dir) || ARGV.first == 'run'
|
18
|
+
Dir.mkdir pid_dir unless Dir.exist?(pid_dir)
|
17
19
|
|
18
20
|
daemon_options = {
|
19
21
|
:multiple => false,
|
data/bin/lobsterize
CHANGED
@@ -60,8 +60,8 @@ unless File.exist?(schedule)
|
|
60
60
|
## Job named my_job
|
61
61
|
#job 'my_job' do
|
62
62
|
#
|
63
|
-
## will just sleep for 5 seconds,
|
64
|
-
##
|
63
|
+
## will just sleep for 5 seconds, you can use relative paths
|
64
|
+
## from the directory defined with the "directory" command
|
65
65
|
# command 'sleep 5'
|
66
66
|
#
|
67
67
|
## the user my_user will be use to run the command, Lobster needs
|
@@ -71,6 +71,9 @@ unless File.exist?(schedule)
|
|
71
71
|
## Lobster will wait 2 minutes between 2 runs
|
72
72
|
# delay 2
|
73
73
|
#
|
74
|
+
## will run the command from this directory. Defaults to LOBSTER_DIR
|
75
|
+
# directory '/my_directory/here/'
|
76
|
+
#
|
74
77
|
## end of job definition
|
75
78
|
#end
|
76
79
|
EOF
|
@@ -3,10 +3,14 @@ require 'yaml'
|
|
3
3
|
module Lobster
|
4
4
|
class Configuration
|
5
5
|
def initialize(dir, env)
|
6
|
+
reload(dir,env)
|
7
|
+
end
|
8
|
+
|
9
|
+
def reload(dir, env)
|
6
10
|
@config = {
|
7
11
|
:monitor => true,
|
8
12
|
:log_dir => 'log',
|
9
|
-
:pid_dir =>
|
13
|
+
:pid_dir => 'pids',
|
10
14
|
:schedule_file => File.join('config', 'schedule.rb')
|
11
15
|
}
|
12
16
|
|
@@ -14,7 +18,8 @@ module Lobster
|
|
14
18
|
if File.exist? config_file_path
|
15
19
|
config_file = YAML.load_file(config_file_path)
|
16
20
|
@config.keys.each do |key|
|
17
|
-
|
21
|
+
# environment-specific override
|
22
|
+
val = config_file[env][key.to_s] if config_file[env]
|
18
23
|
val = config_file[key.to_s] if val.nil?
|
19
24
|
@config[key] = val unless val.nil? # keep default if no config
|
20
25
|
end
|
data/lib/lobster/job.rb
CHANGED
@@ -8,10 +8,11 @@ module Lobster
|
|
8
8
|
@pid = nil
|
9
9
|
end
|
10
10
|
|
11
|
-
def reload(options)
|
11
|
+
def reload(options, lobster_dir)
|
12
12
|
options[:delay] ||= 10
|
13
|
+
options[:directory] ||= lobster_dir
|
13
14
|
|
14
|
-
[:command, :delay, :user].each do |opt|
|
15
|
+
[:command, :delay, :user, :directory].each do |opt|
|
15
16
|
val = instance_variable_get "@#{opt}"
|
16
17
|
if options[opt] != val
|
17
18
|
Lobster.logger.info "Job #{opt} updated for #{@name}, was \"#{val}\", now \"#{options[opt]}\"" if val
|
@@ -21,7 +22,7 @@ module Lobster
|
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
24
|
-
@name ||= "<unnamed_job_#{command.hash.abs}>"
|
25
|
+
@name ||= "<unnamed_job_#{@command.hash.abs}>"
|
25
26
|
@next_run ||= Time.now + rand(@delay*60)
|
26
27
|
end
|
27
28
|
|
@@ -37,12 +38,12 @@ module Lobster
|
|
37
38
|
end
|
38
39
|
end
|
39
40
|
|
40
|
-
def run(out,err
|
41
|
+
def run(out,err)
|
41
42
|
Lobster.logger.info "Starting job #{@name}"
|
42
|
-
command_line = @user ? "sudo -
|
43
|
+
command_line = @user ? "sudo -snu #{@user} '#{@command}'" : @command
|
43
44
|
|
44
45
|
begin
|
45
|
-
@pid = spawn(command_line, :out=>out, :err=>err, :chdir=>
|
46
|
+
@pid = spawn(command_line, :out=>out, :err=>err, :chdir=> @directory)
|
46
47
|
rescue Exception => e
|
47
48
|
Lobster.logger.error "#{e}: error when starting job #{@name}"
|
48
49
|
@next_run = Time.now + 10
|
data/lib/lobster/job_list.rb
CHANGED
@@ -2,8 +2,8 @@ module Lobster
|
|
2
2
|
class JobList
|
3
3
|
attr_accessor :jobs
|
4
4
|
|
5
|
-
def initialize(
|
6
|
-
@
|
5
|
+
def initialize(config)
|
6
|
+
@config = config
|
7
7
|
@current_options = nil
|
8
8
|
@jobs = {}
|
9
9
|
end
|
@@ -11,7 +11,8 @@ module Lobster
|
|
11
11
|
def reload
|
12
12
|
@new_jobs = {}
|
13
13
|
|
14
|
-
|
14
|
+
file = @config[:schedule_file]
|
15
|
+
instance_eval(File.read(file),file)
|
15
16
|
|
16
17
|
# purely for logging
|
17
18
|
@jobs.each do |name, job|
|
@@ -25,11 +26,11 @@ module Lobster
|
|
25
26
|
@current_options = {}
|
26
27
|
yield
|
27
28
|
@new_jobs[name] ||= @jobs[name] || Job.new(name)
|
28
|
-
@new_jobs[name].reload(@current_options)
|
29
|
+
@new_jobs[name].reload(@current_options, @config[:lobster_dir])
|
29
30
|
@current_options = nil
|
30
31
|
end
|
31
32
|
|
32
|
-
[:command, :delay, :user].each do |opt|
|
33
|
+
[:command, :delay, :user, :directory].each do |opt|
|
33
34
|
define_method opt do |value|
|
34
35
|
@current_options[opt] = value
|
35
36
|
end
|
@@ -39,5 +40,10 @@ module Lobster
|
|
39
40
|
def cmd(command)
|
40
41
|
@current_options[:command] = command
|
41
42
|
end
|
43
|
+
|
44
|
+
# config data
|
45
|
+
def environment
|
46
|
+
@config[:environment]
|
47
|
+
end
|
42
48
|
end
|
43
49
|
end
|
data/lib/lobster/service.rb
CHANGED
@@ -31,7 +31,7 @@ module Lobster
|
|
31
31
|
|
32
32
|
trap 'HUP' do
|
33
33
|
begin
|
34
|
-
@config
|
34
|
+
@config.reload(@config[:lobster_dir], @config[:environment])
|
35
35
|
rescue Exception => e
|
36
36
|
Lobster.logger.error "Cannot reload conf, Exception: #{e}"
|
37
37
|
break
|
@@ -64,16 +64,21 @@ module Lobster
|
|
64
64
|
|
65
65
|
@job_list.jobs.each_value do |job|
|
66
66
|
if not job.running? and now >= job.next_run
|
67
|
-
job.run(@wout, @werr
|
67
|
+
job.run(@wout, @werr)
|
68
68
|
end
|
69
69
|
end
|
70
70
|
@sleeping = true
|
71
|
-
|
71
|
+
begin
|
72
|
+
sleep @poll_delay
|
73
|
+
rescue Exception => e
|
74
|
+
Lobster.logger.info "Sleep caught exception: #{e}"
|
75
|
+
break
|
76
|
+
end
|
72
77
|
end
|
73
78
|
end
|
74
79
|
|
75
80
|
def reload_schedule
|
76
|
-
@job_list ||= JobList.new(@config
|
81
|
+
@job_list ||= JobList.new(@config)
|
77
82
|
begin
|
78
83
|
@job_list.reload
|
79
84
|
rescue Exception => e
|
data/lib/lobster/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lobster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-03-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: daemons
|
16
|
-
requirement: &
|
16
|
+
requirement: &78818160 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: 1.1.4
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *78818160
|
25
25
|
description: ''
|
26
26
|
email:
|
27
27
|
- m.brugidou@criteo.com
|