Sha256: c0b17d413d454fceaaf629c7af6e6f5fed2997b4ba37bdf4ffcaf661fb36728c
Contents?: true
Size: 1.27 KB
Versions: 2
Compression:
Stored size: 1.27 KB
Contents
module Spool class Spawner attr_reader :configuration def initialize(configuration) @configuration = configuration end def spawn base_file = File.join Dir.tmpdir, SecureRandom.uuid pid_file = "#{base_file}.pid" out_file = "#{base_file}.out" script_file = "#{base_file}.sh" File.write script_file, %Q{ #!/usr/bin/env bash #{configuration.command.strip} & echo $! > #{pid_file} } ::Process.spawn configuration.env, "sh #{script_file}", chdir: configuration.dir, out: out_file, err: out_file pid = wait_for_pid pid_file Datacenter::Process.new(pid).tap do |process| raise "Invalid command: #{configuration.command}\n#{IO.read(out_file)}" unless process.alive? end ensure [script_file, out_file, pid_file].each do |filename| File.delete filename if File.exists? filename end end def self.spawn(configuration) new(configuration).spawn end private def wait_for_pid(pid_file) Timeout.timeout(60) do until File.exists?(pid_file); end IO.read(pid_file).to_i end rescue Timeout::Error nil end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
spool-0.1.1 | lib/spool/spawner.rb |
spool-0.0.1 | lib/spool/spawner.rb |