Timeout commands if they run for longer than three seconds
parent
e6d32c5cab
commit
fb94656f49
|
@ -0,0 +1,3 @@
|
||||||
|
export OUR_NICK=your
|
||||||
|
export OUR_CHANNELS='#bots'
|
||||||
|
export OUR_CMDS_DIR=/town/our
|
|
@ -8,7 +8,7 @@ WorkingDirectory=/home/kindrobot/spacework/our
|
||||||
ExecStart=/home/kindrobot/spacework/our/our.rb
|
ExecStart=/home/kindrobot/spacework/our/our.rb
|
||||||
Environment="OUR_NICK=your"
|
Environment="OUR_NICK=your"
|
||||||
Environment="OUR_CHANNELS=#bots"
|
Environment="OUR_CHANNELS=#bots"
|
||||||
Environment="OUR_CMDS_DIR=/home/kindrobot/spacework/our/cmds/"
|
Environment="OUR_CMDS_DIR=/town/our"
|
||||||
Restart=always
|
Restart=always
|
||||||
RestartSec=5
|
RestartSec=5
|
||||||
StartLimitInterval=60s
|
StartLimitInterval=60s
|
||||||
|
|
19
our.rb
19
our.rb
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/env ruby
|
#!/usr/bin/env ruby
|
||||||
require 'socket'
|
|
||||||
require 'open3'
|
require 'open3'
|
||||||
|
require 'socket'
|
||||||
|
require 'timeout'
|
||||||
|
|
||||||
# configurable environment variables
|
# configurable environment variables
|
||||||
nick = ENV['OUR_NICK'] || 'our'
|
nick = ENV['OUR_NICK'] || 'our'
|
||||||
|
@ -94,13 +95,17 @@ i.hook do |msg|
|
||||||
end
|
end
|
||||||
|
|
||||||
begin
|
begin
|
||||||
# child = IO.popen [cmd, args, msg.prefix, target]
|
Open3.popen2e(cmd, args, msg.prefix, target) do |_, stdout, wait_thread|
|
||||||
# out = child.gets
|
out = nil
|
||||||
# child.close
|
Timeout::timeout(3) do
|
||||||
Open3.popen2e(cmd, args, msg.prefix, target) {|_, stdout, _|
|
out = stdout.gets # only interested in the first line of output
|
||||||
out = stdout.gets
|
stdout.gets until stdout.eof? # make sure process finishes in time allotted
|
||||||
|
end
|
||||||
i.privmsg target, out if out
|
i.privmsg target, out if out
|
||||||
}
|
rescue Timeout::Error
|
||||||
|
Process.kill("KILL", wait_thread.pid)
|
||||||
|
i.privmsg target, "[our.rb] command timed out"
|
||||||
|
end
|
||||||
rescue Exception => e
|
rescue Exception => e
|
||||||
i.privmsg target, "[our.rb] #{e.to_s}"
|
i.privmsg target, "[our.rb] #{e.to_s}"
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue