如何将ruby脚本作为服务运行,包括ubuntu中的Sinatra?

如何将ruby脚本作为服务运行,包括ubuntu中的Sinatra?,ruby,ubuntu,sinatra,Ruby,Ubuntu,Sinatra,我编写了一个脚本,通过串行接口将我的UPS数据解析为json文件,每5秒无限循环一次: require 'json' pipe = IO.popen("apcaccess") upsdata_h = {} data = [] while true pipe = IO.popen("apcaccess") upsdata_h[:ups] = {} data = [] while (line = pipe.gets) data = line.split(':')

我编写了一个脚本,通过串行接口将我的UPS数据解析为json文件,每5秒无限循环一次:

require 'json'

pipe = IO.popen("apcaccess")

upsdata_h = {}
data = []

while true 

  pipe = IO.popen("apcaccess")
  upsdata_h[:ups] = {}
  data = []

  while (line = pipe.gets)
    data = line.split(':')
    upsdata_h[:ups][data[0].strip] = data[1].strip
  end

  puts "Internal temperature: #{upsdata_h[:ups]['ITEMP']}"

  File.open("upsdata.json", "w") do |f|
    f.write(upsdata_h.to_json)
  end

  sleep 5 

end
我还有另一个小程序,用sinatra创建一个小api:

require 'sinatra'

set :bind, '0.0.0.0'

get '/api/upsdata' do
  content_type :json
  File.read('upsdata.json')
end

我想在我的ubuntu服务器15.04中将它们作为服务运行。如何让脚本像其他ubuntu服务一样在后台永远运行?我是否也应该在服务中包括sinatra,以便它在引导时加载?

您可以单独启动每个服务

upstart脚本位于扩展名为
.conf
/etc/init
中,类似于
/etc/init/myscript.conf

下面是一个简单的upstart脚本示例:

#!upstart
description "my server"
author      "Me"

start on filesystem
stop on runlevel [!2345]
respawn

script
    /path/to/ruby /path/to/script
end script

这一部分完成后,您可以使用
start myscript

手动启动服务。在最新的ubuntu版本中,upstart似乎已被systemd取代。