rsched 0.3.1 → 0.3.2
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/ChangeLog +6 -0
- data/README.rdoc +7 -2
- data/lib/rsched/command/rsched.rb +23 -13
- data/lib/rsched/engine.rb +5 -0
- data/lib/rsched/version.rb +1 -1
- metadata +4 -4
data/ChangeLog
CHANGED
data/README.rdoc
CHANGED
@@ -45,18 +45,23 @@ _Example:_
|
|
45
45
|
--exec COMMAND Execute command
|
46
46
|
--run SCRIPT.rb Run method named 'run' defined in the script
|
47
47
|
-a, --add EXPR Add an execution schedule
|
48
|
-
-t, --timeout SEC Retry timeout (default:
|
48
|
+
-t, --timeout SEC Retry timeout (default: 30)
|
49
49
|
-r, --resume SEC Limit time to resume tasks (default: 3600)
|
50
50
|
-E, --delete SEC Limit time to delete tasks (default: 2592000)
|
51
51
|
-n, --name NAME Unique name of this node (default: PID.HOSTNAME)
|
52
52
|
-w, --delay SEC Delay time before running a task (default: 0)
|
53
|
-
-F, --from
|
53
|
+
-F, --from YYYY-mm-dd_OR_now Time to start scheduling
|
54
|
+
-e, --extend-timeout SEC Threashold time before extending visibility timeout (default: timeout * 3/4)
|
55
|
+
-x, --kill-timeout SEC Threashold time before killing process (default: timeout * 10)
|
56
|
+
-X, --kill-retry SEC Threashold time before retrying killing process (default: 60)
|
54
57
|
-i, --interval SEC Scheduling interval (default: 10)
|
58
|
+
-U, --release-on-fail Releases lock if task failed so that other node can retry immediately
|
55
59
|
-T, --type TYPE Lock database type (default: mysql)
|
56
60
|
-D, --database DB Database name
|
57
61
|
-H, --host HOST[:PORT] Database host
|
58
62
|
-u, --user NAME Database user name
|
59
63
|
-p, --password PASSWORD Database password
|
64
|
+
--env K=V Set environment variable
|
60
65
|
-d, --daemon PIDFILE Daemonize (default: foreground)
|
61
66
|
-f, --file PATH.yaml Read configuration file
|
62
67
|
|
@@ -15,7 +15,7 @@ defaults = {
|
|
15
15
|
:delay => 0,
|
16
16
|
:interval => 10,
|
17
17
|
:type => 'mysql',
|
18
|
-
:
|
18
|
+
:node_name => "#{Process.pid}.#{`hostname`.strip}",
|
19
19
|
:kill_retry => 60,
|
20
20
|
:release_on_fail => false,
|
21
21
|
}
|
@@ -51,7 +51,7 @@ op.on('-E', '--delete SEC', 'Limit time to delete tasks (default: 2592000)', Int
|
|
51
51
|
}
|
52
52
|
|
53
53
|
op.on('-n', '--name NAME', 'Unique name of this node (default: PID.HOSTNAME)') {|s|
|
54
|
-
conf[:
|
54
|
+
conf[:node_name] = s
|
55
55
|
}
|
56
56
|
|
57
57
|
op.on('-w', '--delay SEC', 'Delay time before running a task (default: 0)', Integer) {|i|
|
@@ -82,12 +82,12 @@ op.on('-i', '--interval SEC', 'Scheduling interval (default: 10)', Integer) {|i|
|
|
82
82
|
conf[:interval] = i
|
83
83
|
}
|
84
84
|
|
85
|
-
op.on('-
|
85
|
+
op.on('-U', '--release-on-fail', 'Releases lock if task failed so that other node can retry immediately', TrueClass) {|b|
|
86
86
|
conf[:release_on_fail] = b
|
87
87
|
}
|
88
88
|
|
89
89
|
op.on('-T', '--type TYPE', 'Lock database type (default: mysql)') {|s|
|
90
|
-
conf[:
|
90
|
+
conf[:db_type] = s
|
91
91
|
}
|
92
92
|
|
93
93
|
op.on('-D', '--database DB', 'Database name') {|s|
|
@@ -106,12 +106,17 @@ op.on('-p', '--password PASSWORD', 'Database password') {|s|
|
|
106
106
|
conf[:db_password] = s
|
107
107
|
}
|
108
108
|
|
109
|
+
op.on('--env K=V', 'Set environment variable') {|s|
|
110
|
+
k, v = s.split('=',2)
|
111
|
+
(conf[:env] ||= {})[k] = v
|
112
|
+
}
|
113
|
+
|
109
114
|
op.on('-d', '--daemon PIDFILE', 'Daemonize (default: foreground)') {|s|
|
110
115
|
conf[:daemon] = s
|
111
116
|
}
|
112
117
|
|
113
118
|
op.on('-f', '--file PATH.yaml', 'Read configuration file') {|s|
|
114
|
-
conf[:
|
119
|
+
(conf[:files] ||= []) << s
|
115
120
|
}
|
116
121
|
|
117
122
|
|
@@ -137,11 +142,16 @@ begin
|
|
137
142
|
usage nil
|
138
143
|
end
|
139
144
|
|
140
|
-
if conf[:
|
145
|
+
if conf[:files]
|
141
146
|
require 'yaml'
|
142
|
-
|
147
|
+
docs = ''
|
148
|
+
conf[:files].each {|file|
|
149
|
+
docs << File.read(file)
|
150
|
+
}
|
143
151
|
y = {}
|
144
|
-
|
152
|
+
YAML.load_documents(docs) {|yaml|
|
153
|
+
yaml.each_pair {|k,v| y[k.to_sym] = v }
|
154
|
+
}
|
145
155
|
|
146
156
|
conf = defaults.merge(y).merge(conf)
|
147
157
|
|
@@ -174,7 +184,7 @@ begin
|
|
174
184
|
raise "delete time (-E) must be larger than resume time (-r)"
|
175
185
|
end
|
176
186
|
|
177
|
-
case conf[:
|
187
|
+
case conf[:db_type]
|
178
188
|
when 'mysql'
|
179
189
|
if !conf[:db_database] || !conf[:db_host] || !conf[:db_user]
|
180
190
|
raise "--database, --host and --user are required for mysql"
|
@@ -188,7 +198,7 @@ begin
|
|
188
198
|
dbi = "DBI:SQLite3:#{conf[:db_database]}"
|
189
199
|
|
190
200
|
else
|
191
|
-
raise "Unknown lock server type '#{conf[:
|
201
|
+
raise "Unknown lock server type '#{conf[:db_type]}'"
|
192
202
|
end
|
193
203
|
|
194
204
|
unless conf[:extend_timeout]
|
@@ -207,7 +217,7 @@ end
|
|
207
217
|
if confout
|
208
218
|
require 'yaml'
|
209
219
|
|
210
|
-
conf.delete(:
|
220
|
+
conf.delete(:files)
|
211
221
|
conf[:schedule] = schedule
|
212
222
|
conf[:args] = ARGV
|
213
223
|
|
@@ -226,7 +236,7 @@ if schedule.empty?
|
|
226
236
|
end
|
227
237
|
|
228
238
|
|
229
|
-
puts "Using node name #{conf[:
|
239
|
+
puts "Using node name #{conf[:node_name]}"
|
230
240
|
|
231
241
|
|
232
242
|
if conf[:daemon]
|
@@ -244,7 +254,7 @@ end
|
|
244
254
|
|
245
255
|
|
246
256
|
begin
|
247
|
-
lock = RSched::DBLock.new(conf[:
|
257
|
+
lock = RSched::DBLock.new(conf[:node_name], conf[:timeout], dbi, conf[:db_user].to_s, conf[:db_password].to_s)
|
248
258
|
rescue DBI::InterfaceError
|
249
259
|
STDERR.puts "Can't initialize DBI interface: #{$!}"
|
250
260
|
STDERR.puts "You may have to install database driver first:"
|
data/lib/rsched/engine.rb
CHANGED
@@ -56,6 +56,7 @@ class Engine
|
|
56
56
|
@kill_retry = conf[:kill_retry]
|
57
57
|
@sched_start = conf[:from] || 0
|
58
58
|
@release_on_fail = conf[:release_on_fail]
|
59
|
+
@env = conf[:env] || {}
|
59
60
|
@finished = false
|
60
61
|
@ss = {}
|
61
62
|
|
@@ -146,6 +147,10 @@ class Engine
|
|
146
147
|
def process(token, ident, time, action)
|
147
148
|
puts "started token=#{token.inspect} time=#{time}"
|
148
149
|
|
150
|
+
@env.each_pair {|k,v|
|
151
|
+
ENV[k] = v
|
152
|
+
}
|
153
|
+
|
149
154
|
@extender.set_token(token)
|
150
155
|
|
151
156
|
success = false
|
data/lib/rsched/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsched
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 2
|
10
|
+
version: 0.3.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sadayuki Furuhashi
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-07-
|
18
|
+
date: 2011-07-23 00:00:00 +09:00
|
19
19
|
default_executable: rsched
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|