lobster 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|