lobster 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
data/lib/lobster/job.rb CHANGED
@@ -8,21 +8,6 @@ module Lobster
8
8
  @name = name
9
9
  Lobster.logger.info "Job #{name} created."
10
10
  @pid = nil
11
-
12
- rout, @wout = IO.pipe
13
- rerr, @werr = IO.pipe
14
-
15
- Thread.new do
16
- while (line = rout.gets)
17
- Lobster.logger.info "#{@name}: #{line.chomp}"
18
- end
19
- end
20
-
21
- Thread.new do
22
- while (line = rerr.gets)
23
- Lobster.logger.warn "#{@name}: #{line.chomp}"
24
- end
25
- end
26
11
  end
27
12
 
28
13
  def reload(options, lobster_dir)
@@ -62,6 +47,7 @@ module Lobster
62
47
  Lobster.logger.error "Job #{@name} Failed with status #{$?}"
63
48
  end
64
49
  @pid = nil
50
+ close_pipes
65
51
  @next_run = Time.now + @delay*60
66
52
  false
67
53
  else
@@ -70,13 +56,16 @@ module Lobster
70
56
  end
71
57
 
72
58
  def run
59
+ create_pipes
60
+
73
61
  Lobster.logger.info "Starting job #{@name}"
74
- command_line = @user ? "sudo -inu #{@user} -- sh -c 'cd #{@directory}; #{@command}'" : @command
62
+ command_line = @user ? "sudo -nu #{@user} -- sh -lc 'cd #{@directory}; #{@command}'" : @command
75
63
 
76
64
  begin
77
65
  @pid = spawn(command_line, :out=>@wout, :err=>@werr, :chdir=> @directory)
78
66
  rescue Exception => e
79
67
  Lobster.logger.error "#{e}: error when starting job #{@name}"
68
+ close_pipes
80
69
  @next_run = Time.now + 10
81
70
  end
82
71
  end
@@ -92,5 +81,44 @@ module Lobster
92
81
  Process.wait @pid
93
82
  end
94
83
  end
84
+
85
+ def destroy
86
+ Thread.new do
87
+ Lobster.logger.info "Job #{name} being destroyed."
88
+ destroy_time = Time.now
89
+ while running?
90
+ sleep 60
91
+ if ((delay = Time.now - destroy_time) > 60*60)
92
+ Lobster.logger.warn "Job #{name} has not been destroyed after #{delay} seconds."
93
+ end
94
+ end
95
+ end
96
+ end
97
+
98
+ private
99
+
100
+ def create_pipes
101
+ @rout, @wout = IO.pipe
102
+ @rerr, @werr = IO.pipe
103
+
104
+ Thread.new do
105
+ while (line = @rout.gets)
106
+ Lobster.logger.info "#{@name}: #{line.chomp}"
107
+ end
108
+ end
109
+
110
+ Thread.new do
111
+ while (line = @rerr.gets)
112
+ Lobster.logger.warn "#{@name}: #{line.chomp}"
113
+ end
114
+ end
115
+ end
116
+
117
+ def close_pipes
118
+ @wout.close
119
+ @rout.close
120
+ @werr.close
121
+ @rerr.close
122
+ end
95
123
  end
96
124
  end
@@ -16,7 +16,7 @@ module Lobster
16
16
 
17
17
  # purely for logging
18
18
  @jobs.each do |name, job|
19
- Lobster.logger.info "Job #{name} deleted." unless @new_jobs[name]
19
+ job.destroy unless @new_jobs[name]
20
20
  end
21
21
 
22
22
  @jobs = @new_jobs
@@ -1,3 +1,3 @@
1
1
  module Lobster
2
- VERSION = '0.2.5'
2
+ VERSION = '0.2.6'
3
3
  end
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.2.5
4
+ version: 0.2.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-17 00:00:00.000000000 Z
12
+ date: 2013-05-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: daemons