lobster 0.2.5 → 0.2.6

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/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