プロセスが自身を強制終了する場合でも、プロセスが実行されていることを確認するにはどうすればよいですか?(それから再起動する必要があります)


2

Linuxを使用しています。コンピューターを起動するたびにプロセス(ircボット)を実行したい。しかし、問題があります。ネットワークが悪く、頻繁に切断されるため、ボットを1日に数回手動で再起動する必要があります。どうすれば自動化できますか?

追加情報:ボットはbot.pidというpidファイルを作成します。ボットは数回しか再接続しません。ネットワークが非常に悪いので、ボットは応答がないために時々自分自身を殺します。

私が現在していること(別名私のアプローチ;))cronジョブをstartbot.rb5分ごとに実行しています。(スクリプト自体はボットと同じディレクトリにあります)

スクリプト:

#!/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ファイルが存在するかどうかを確認し、それが真である場合kill -s 0 BOT_PID == 1(ボットが実行されている場合)、2つのチェックのいずれかが失敗/真でない場合にボットを開始します。

私のアプローチはかなり汚いようですが、どうすればもっと良くできますか?


Monitは、このようなものにとって非常に便利なユーティリティになります。構成も面倒ではありません。ここ:mmonit.com/monit/documentation/monit.htmlおよびここ:mmonit.com/wiki/Monit/ConfigurationExamples
thisfeller

また、スウォッチとdwatchを見てください。これらは、プロセスが停止したときにさまざまなことを実行できる監視デーモンです。状況によってはマシンを再起動することもできます。
イアンアトキン

Processクラスを使用して、子プロセスの管理に役立てたい場合があります。
vgoff

[OK] THX、私は似た何かをした:私はそれはそれは、すぐにボットが自分自身を殺すよう何、終了するとすぐに私のスクリプトを実行し、迅速ループスクリプトを書きました;)
le_me

回答:


1

私は自分の質問をstackoverflow.comにクロスポストし、そこで答えを得ました;)

https://stackoverflow.com/a/13627784/1081936

アプリケーションの再起動は、解決策ではなく、悪い回避策です。

ボットのドキュメントを確認し、不正なリトライが何回終了した後に設定するか、この機能を完全に無効にする方法を探すことをお勧めします。ボットがオープンソースの場合、そのソースコードを確認して再試行コードを変更することもできます。きれいな解決策を見つけてください。

本当に再起動したい場合は、ボットをループで実行するシェルスクリプトを作成します。bot.rbがバックグラウンドに分岐しないことを確認します。

#/bin/bash
for (( ; ; ))
do
     ./bot.rb
done

nohup ./startscript.sh &コンソールを閉じても終了しないように、そのスクリプトを実行できます 。


リマインダーをありがとう、私は十分な評判を得ていなかったので、すぐにそれを受け入れることができませんでした:P
le_me
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.