Ruby script as service

后端 未结 4 1338
滥情空心
滥情空心 2021-02-04 08:21

Well, the title say it all. I have a ruby script I want running as a service (one I can start and stop) on my Linux box. I was able to find how to do it on Windows here

相关标签:
4条回答
  • 2021-02-04 08:52

    I've actually found a much better way of doing that by using ruby scripts.

    This is how I did it:

    First of all, I installed daemon

    gem install daemons
    

    Then I did:

    require 'rubygems'
    require 'daemons'
    
    pwd  = File.dirname(File.expand_path(__FILE__))
    file = pwd + '/runner.rb'
    
    Daemons.run_proc(
       'my_project', # name of daemon
       :log_output => true
     ) do
       exec "ruby #{file}"
    end
    

    I then create a file called runner.rb, in which I can call my scripts such as:

    require "/var/www/rails/my_project/config/environment"
    Post.send('details....')
    

    Daemons is a great gem!

    0 讨论(0)
  • 2021-02-04 08:52

    From 1.9.x ruby has a built in function:

    Process.daemon

    0 讨论(0)
  • 2021-02-04 08:54

    RAA - deamons is a verfy useful tool for creating unix daemons from ruby scripts.

    0 讨论(0)
  • 2021-02-04 08:54

    Posting my answer after more than a decade Original Poster asked the question.

    First, let's create a simple ruby script, which will run an infinite loop:

    # mydaemon.rb 
    $stdout.reopen('/home/rmishra/mydaemon.log', 'a')
    $stdout.sync = true
    loop.with_index do |_, i|
      puts i
      sleep(3)
    end
    

    You can run the script in the background by appending ampersand:

    /home/rmishra$ ruby mydaemon.rb &
    [1] *pid*
    

    To start this script automatically and restart it whenever it was stopped or crashed, we will create a service.

    # mydaemon.service
    [Unit]
    Description=Simple supervisor
    
    [Service]
    User=username
    Group=username
    WorkingDirectory=/home/username
    Restart=always
    ExecStart=/usr/bin/ruby mydaemon.rb
    
    [Install]
    WantedBy=multi-user.target
    

    Now, let's copy this service file to systemd directory:

    sudo cp mydaemon.service /lib/systemd/system -v
    

    Finally, use the enable command to ensure that the service starts whenever the system boots:

    sudo systemctl enable mydaemon.service
    

    The service can be started, stopped or restarted using standard systemd commands:

    sudo systemctl status mydaemon
    sudo systemctl start mydaemon
    sudo systemctl stop mydaemon
    sudo systemctl restart mydaemon
    

    Source

    0 讨论(0)
提交回复
热议问题