嗯,标题说明了一切。我有一个ruby脚本,我想在我的Linux机器上作为服务运行(我可以启动和停止)。我能够在Windows here
上找到如何做到这一点有些读数指向创建守护进程或cron任务。
我只需要一些简单的东西,我可以在我的盒子重启时调用,并且可以随时停止/启动。我的脚本有一个内部睡眠调用,并以“永恒循环”运行
提前致谢
答案 0 :(得分:14)
我实际上通过使用ruby脚本找到了更好的方法。
我就这样做了:
首先,我安装了守护进程
gem install daemons
然后我做了:
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
然后我创建了一个名为runner.rb的文件,我可以在其中调用我的脚本,如:
require "/var/www/rails/my_project/config/environment"
Post.send('details....')
守护神是一颗伟大的宝石!
答案 1 :(得分:3)
RAA - deamons是一个用于从ruby脚本创建unix守护进程的有用工具。
答案 2 :(得分:2)
十多年来,原始海报发布了我的答案。
首先,让我们创建一个简单的ruby脚本,它将运行一个无限循环:
# mydaemon.rb
$stdout.reopen('/home/rmishra/mydaemon.log', 'a')
$stdout.sync = true
loop.with_index do |_, i|
puts i
sleep(3)
end
您可以通过添加与号在后台运行脚本:
/home/rmishra$ ruby mydaemon.rb &
[1] *pid*
要自动启动此脚本并在其停止或崩溃时重新启动它,我们将创建一个服务。
# 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
现在,让我们将此服务文件复制到systemd目录:
sudo cp mydaemon.service /lib/systemd/system -v
最后,使用enable
命令来确保该服务在系统启动时启动:
sudo systemctl enable mydaemon.service
可以使用标准systemd
命令启动,停止或重新启动服务:
sudo systemctl status mydaemon
sudo systemctl start mydaemon
sudo systemctl stop mydaemon
sudo systemctl restart mydaemon
答案 3 :(得分:0)
从1.9.x开始,ruby具有内置功能:
Process.daemon