Подтвердить что ты не робот

Сделать программу Ruby демоном?

Я хочу написать программу Ruby, которая всегда будет работать в фоновом режиме (демона) на моем Mac.

Может ли кто-нибудь указать мне в правильном направлении, как это будет сделано?

4b9b3361

Ответ 2

Теперь Ruby 1.9.x имеет следующие значения:

Process.daemon

Поместите его в свой код и его.

Взято из Процессы Daemon в Ruby.

Ответ 4

Это модуль для демонтирования вашего кода. Здесь ответвление, которое обертывает существующий script.

По сути, это сводится к этому (от Travis Whitton Daemonize.rb, первая ссылка выше, измененная для некоторой программы, которую я написал много лет назад):

private
# This method causes the current running process to become a daemon
# If closefd is true, all existing file descriptors are closed
def daemonize(pathStdErr, oldmode=0, closefd=false)
    srand # Split rand streams between spawning and daemonized process
    safefork and exit# Fork and exit from the parent

    # Detach from the controlling terminal
    unless sess_id = Process.setsid
        raise 'Cannot detach from controlled terminal'
    end

    # Prevent the possibility of acquiring a controlling terminal
    if oldmode.zero?
        trap 'SIGHUP', 'IGNORE'
        exit if pid = safefork
    end

    Dir.chdir "/"   # Release old working directory
    File.umask 0000 # Insure sensible umask

    if closefd
        # Make sure all file descriptors are closed
        ObjectSpace.each_object(IO) do |io|
            unless [STDIN, STDOUT, STDERR].include?(io)
                io.close rescue nil
            end
        end
    end

    STDIN.reopen "/dev/null"       # Free file descriptors and
    STDOUT.reopen "/dev/null"   # point them somewhere sensible
    STDERR.reopen pathStdErr, "w"           # STDOUT/STDERR should go to a logfile
    return oldmode ? sess_id : 0   # Return value is mostly irrelevant
end

# Try to fork if at all possible retrying every 5 sec if the
# maximum process limit for the system has been reached
def safefork
    tryagain = true
    while tryagain
        tryagain = false
        begin
            if pid = fork
                return pid
            end
        rescue Errno::EWOULDBLOCK
            sleep 5
            tryagain = true
        end
    end
end

Ответ 5

Вам нужно увидеть драгоценный камень демонов для Rails 3 (на основе rails_generator):

https://github.com/mirasrael/daemons-rails

Возможно создание демона-заглушки следующим образом:

rails generate daemon <name>

Особенности:

  • индивидуальное управление script за демон
  • rake: команда daemon для каждого демона
  • capistrano friendly
  • управление всеми приложениями script
  • API мониторинга
  • возможные множества демона