私は、労働者の数が毎週増加しているマスターワーカーアーキテクチャを持っています。ワーカーを強制終了し、ソース管理の同期を実行して再起動するために、各マシンにsshまたはリモートコンソールを接続することはもう期待できません。マスターに、各マシンに同期して再起動するように指示するメッセージをネットワーク上に配置してもらいたいです。
それが私が障害にぶつかったところです。正気のプラットフォームを使用している場合は、次のことができます。
exec('ruby', __FILE__)
...そして行われる。ただし、次のテストを行いました。
p Process.pid
sleep 1
exec('ruby', __FILE__)
...そしてWindowsでは、execの呼び出しごとに1つのrubyインスタンスを取得します。問題のウィンドウで^Cを押すまで、それらのどれも死にません。私がこれを試したすべてのプラットフォームで、毎回新しいバージョンのファイルが実行されています。これは、テストが進行している間にテストスクリプトを簡単に編集することで確認しました。
pidを印刷する理由は、表示されている動作を再確認するためです。Windowsでは、実行ごとに異なるpidを取得しています。これは、実行ごとにタスクマネージャーに新しいプロセスが表示されていることを考えると予想されます。Macは正しく動作しています。pidはすべてのシステムコールで同じであり、各実行がexecvesyscallへの呼び出しをトリガーしていることをdtraceで確認しました。
つまり、Windowsのrubyスクリプトに実行を再開させて、実行中に変更されたコード(それ自体を含む)を実行する方法はありますか?これはactiverecordを使用しますが、Railsアプリケーションではないことに注意してください。