Sha256: e30e4a764d645c10f533d27c31905e08401921c4e252b705e28ae85a90e8a960

Contents?: true

Size: 956 Bytes

Versions: 3

Compression:

Stored size: 956 Bytes

Contents

require 'daemons'

module FireAndForget
  module Command
    class Fire < CommandBase
      attr_reader :niceness

      def niceness
        @task.niceness
      end

      def binary
        @task.binary
      end

      def cmd
        %(#{binary} #{FireAndForget.to_arguments(@params)})
      end

      def valid?
        exists? && permitted?
      end

      def permitted?
        raise Errno::EACCES.new("'#{binary}' does not belong to user '#{ENV["USER"]}'") unless File.owned?(binary)
        true
      end

      def exists?
        raise Errno::ENOENT.new("'#{binary}'") unless File.exists?(binary)
        true
      end

      def run
        if valid?
          pid = fork do
            Daemons.daemonize(:backtrace => true)
            Process.setpriority(Process::PRIO_PROCESS, 0, niceness) if niceness > 0
            exec(cmd)
          end
          Process.detach(pid) if pid
          pid
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
fire_and_forget-0.1.2 lib/fire_and_forget/command/fire.rb
fire_and_forget-0.1.1 lib/fire_and_forget/command/fire.rb
fire_and_forget-0.1.0 lib/fire_and_forget/command/fire.rb