私はLinuxを使用しています。コンピューターを起動するたびにプロセス (irc ボット) を実行する必要があります。しかし、問題があります。ネットワークが悪く、頻繁に切断されるため、ボットを 1 日に数回手動で再起動する必要があります。それを自動化するにはどうすればよいですか?
追加情報: ボットは bot.pid という名前の pid ファイルを作成します。ボットは自分自身を再接続しますが、数回だけです。ネットワークの調子が悪く、応答がないためにボットが自滅することがあります。
私が現在行っていること (別名私のアプローチ ;)) startbot.rb
5 分ごとに cron ジョブを実行しています。(スクリプト自体はボットと同じディレクトリにあります)
スクリプト:
#!/usr/bin/ruby
require 'fileutils'
if File.exists?(File.expand_path('tmp/bot.pid'))
@pid = File.read(File.expand_path('tmp/bot.pid')).chomp!.to_i
begin
raise "ouch" if Process.kill(0, @pid) != 1
rescue
puts "Removing abandoned pid file"
FileUtils.rm(File.expand_path('tmp/bot.pid'))
puts "Starting the bot!"
Kernel.exec(File.expand_path('./bot.rb'))
else
puts "Bot up and running!"
end
else
puts "Starting the bot!"
Kernel.exec(File.expand_path('./bot.rb'))
end
これが何をするか: pid ファイルが存在するかどうかをチェックし、それが true の場合kill -s 0 BOT_PID == 1
(ボットが実行されているかどうか) をチェックし、2 つのチェックのいずれかが失敗するか true でない場合はボットを起動します。
私のアプローチはかなり汚いようです。