Ruby脚本作为服务

Mar*_*ona 8 ruby linux cron

好吧,标题说明了一切.我有一个ruby脚本,我想在我的Linux机器上作为服务运行(我可以启动和停止).我在这里找到了如何在Windows上做到这一点

一些读数指向创建守护进程或cron任务.

我只需要一些简单的东西,我可以在我的盒子重启时调用,并且可以随时停止/启动.我的脚本有一个内部睡眠调用,并以"永恒循环"运行

提前致谢

Mar*_*ona 14

我实际上通过使用ruby脚本找到了更好的方法.

我就这样做了:

首先,我安装了守护进程

gem install daemons
Run Code Online (Sandbox Code Playgroud)

然后我做了:

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
Run Code Online (Sandbox Code Playgroud)

然后我创建一个名为runner.rb的文件,在其中我可以调用我的脚本,例如:

require "/var/www/rails/my_project/config/environment"
Post.send('details....')
Run Code Online (Sandbox Code Playgroud)

守护进程是一个伟大的宝石!

  • 更好地使用:"gem install daemons"奇异的一个是不同的.你可能想要http://rubygems.org/gems/daemons (5认同)

Raj*_*hra 7

在原始海报提出这个问题十多年后发布我的答案。

首先,让我们创建一个简单的 ruby​​ 脚本,它将运行无限循环:

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

您可以通过附加&符号在后台运行脚本:

/home/rmishra$ ruby mydaemon.rb &
[1] *pid*
Run Code Online (Sandbox Code Playgroud)

为了自动启动此脚本并在停止或崩溃时重新启动它,我们将创建一个服务。

# 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
Run Code Online (Sandbox Code Playgroud)

现在,让我们将此服务文件复制到 systemd 目录:

sudo cp mydaemon.service /lib/systemd/system -v
Run Code Online (Sandbox Code Playgroud)

最后,使用enable命令确保该服务在系统启动时启动:

sudo systemctl enable mydaemon.service
Run Code Online (Sandbox Code Playgroud)

可以使用标准systemd命令启动、停止或重新启动该服务:

sudo systemctl status mydaemon
sudo systemctl start mydaemon
sudo systemctl stop mydaemon
sudo systemctl restart mydaemon
Run Code Online (Sandbox Code Playgroud)

来源

  • 对于任何使用 systemd 的 Linux 发行版来说,这是正确的答案。 (2认同)