我怎样才能 运行 ruby 脚本作为服务包括 ubuntu 中的 Sinatra?
How can I run a ruby script as a service including Sinatra in ubuntu?
我编写了一个脚本,通过串行接口将我的 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 中的一项服务。如何让脚本 运行ning 像其他 ubuntu 的服务一样永远在后台运行?我还应该在服务中包含 sinatra 以便它在启动时加载吗?
您可以使用 upstart 单独启动每个服务。
/etc/init
中有一个 upstart 脚本,扩展名为 .conf
,例如 /etc/init/myscript.conf
。
这是一个简单的新贵脚本示例:
#!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
手动启动服务
我编写了一个脚本,通过串行接口将我的 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 中的一项服务。如何让脚本 运行ning 像其他 ubuntu 的服务一样永远在后台运行?我还应该在服务中包含 sinatra 以便它在启动时加载吗?
您可以使用 upstart 单独启动每个服务。
/etc/init
中有一个 upstart 脚本,扩展名为 .conf
,例如 /etc/init/myscript.conf
。
这是一个简单的新贵脚本示例:
#!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