fc2ブログ
アクセラと+αな生活
アクセラとα350と共に過ごす気まぐれ日記です。
Firefox ブラウザ無料ダウンロード
2025年01月
≪12月  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31    02月≫
「PrimeGrid」では、「Challenge Series」(http://www.primegrid.com/challenge/challenge.php)というイベント(お祭り)が年に10回ほど行われます。


お祭りといっても、期間内でポイントを獲得できるかということを競うだけなので、焼きそばやりんご飴の夜店もありませんし、盆踊りに参加できたりはできません。。。><;
(当たり前ですね。。。)


この「Challenge Series」ですが、イベントの期間内に特定のタスク(ワークユニット)を取得して、解析を終了させたものがポイントに換算されます。
普段から「PrimeGrid」で解析していても、条件(イベントでの対象のタスク、期間内で解析)さえ合えば、勝手にイベントでのポイントを換算してくれます。

ですが、「このイベントでのポイントを本格的に獲得したい」場合には、タスクを切り換えたりしない、他のプロジェクトの解析を中断して、「PrimeGrid」のプロジェクトだけに絞ったりしないといけません。
タスクやプロジェクトの切り替えは、「BOINC Manager」で可能ではありますが、GUI ツールであるため、切り換えたいタイミングで、人的な作業が必要になります。


切り替えが必要なタイミング(イベントの開始や終了)は日本では平日の夜中だったりするので、仕事があるため作業できなかったり、寝てたりする場合もあります。





BOINC では、「BOINC Manager」での GUI だけでなく、「boinccmd」という CUI(コマンドラインでのインターフェイス)が用意されてます。

CUI があれば、コマンドでの操作をバッチ化して、指定時間で自動実行させることも可能ですので、仕事を調整したり、眠い目をこすって作業しなくても済みますww

では、BOINC の CUI である「boinccmd」を見てみましょう。

「boinccmd」に関しては、BOINC のコマンド・ツール(http://boinc.oocp.org/boinc_cmd.php)にその説明が記載されています。
上記の URL では、「boinc_cmd」となってますが、「boinccmd」も同様のようです。


「boinccmd」だけで、行いたいことを全て賄えるとは限りません。
まずは、BOINC のコマンド・ツール(http://boinc.oocp.org/boinc_cmd.php)に一通り目を通して、どんなことが出来るのかを確認しておくといいでしょう。

※コマンドでの操作は Windows では馴染みがない方も多いでしょう。
Windows でのコマンド操作に関する基本的な説明は割愛しますので、コマンド操作がよく分からない場合は、以後の操作を行わないで下さい。



【boinccmd を使ってみる】
「boinccmd」の正体は、「boinccmd.exe」という実行ファイルになります。
BOINC のインストール先をデフォルトでインストールした場合、「%ProgramFiles%\BOINC\boinccmd.exe」(「%ProgramFiles%」は「Program Files」ディレクトリを設定している環境変数)になります。

インストールしただけでは、「%ProgramFiles%\BOINC」にパスが切られていないので、「boinccmd.exe」を実行する場合、
 ・「%ProgramFiles%\BOINC」へパスを切る
 ・「%ProgramFiles%\BOINC」ディレクトリへ移動して実行
 ・「boinccmd.exe」をフルパスで指定
など対応する必要があります。

では、「boinccmd」(バージョン:6.10.56)でどんなことができるのでしょう。。。
「help」をみるのが手っ取り早いですww

>boinccmd.exe --version
boinccmd, built from BOINC 6.10.56

>boinccmd.exe --help

usage: boinccmd [--host hostname] [--passwd passwd] command

Commands:
--lookup_account URL email passwd
--create_account URL email passwd name
--project_attach URL auth attach to project
--join_acct_mgr URL name passwd attach account manager
--quit_acct_mgr quit current account manager
--get_state show entire state
--get_results show results
--get_simple_gui_info show status of projects and active results
--get_file_transfers show file transfers
--get_project_status show status of all attached projects
--get_disk_usage show disk usage
--get_proxy_settings
--get_messages [ seqno ] show messages > seqno
--get_message_count show largest message seqno
--get_host_info
--version, -V show core client version
--result url result_name op job operation
op = suspend | resume | abort | graphics_window | graphics_fullscreen
--project URL op project operation
op = reset | detach | update | suspend | resume | nomorework | allowmorework
--file_transfer URL filename op file transfer operation
op = retry | abort
--set_run_mode mode duration set run mode for given duration
mode = always | auto | never
--set_network_mode mode duration
--set_proxy_settings
--run_benchmarks
--read_global_prefs_override
--quit
--read_cc_config
--set_debts URL1 std1 ltd1 [URL2 std2 ltd2 ...]
--get_project_config URL
--get_project_config_poll
--network_available
--get_cc_status

何かいろいろできそうですね。
基本的には、「--project」でプロジェクト単位の操作、「--result」でタスク単位の操作を行います。

ちなみに、Ubuntu 10.04 での BOINC(バージョン:6.10.17)は。。。

$ boinccmd --version
boinccmd, built from BOINC 6.10.17

$ boinccmd --help

usage: boinccmd [--host hostname] [--passwd passwd] command

Commands:
--lookup_account URL email passwd
--create_account URL email passwd name
--project_attach URL auth attach to project
--join_acct_mgr URL name passwd attach account manager
--quit_acct_mgr quit current account manager
--get_state show entire state
--get_results show results
--get_simple_gui_info show status of projects and active results
--get_file_transfers show file transfers
--get_project_status show status of all attached projects
--get_disk_usage show disk usage
--get_proxy_settings
--get_messages [ seqno ] show messages > seqno
--get_message_count show largest message seqno
--get_host_info
--version, -V show core client version
--result url result_name op job operation
op = suspend | resume | abort | graphics_window | graphics_fullscreen
--project URL op project operation
op = reset | detach | update | suspend | resume | nomorework | allowmorework
--file_transfer URL filename op file transfer operation
op = retry | abort
--set_run_mode mode duration set run mode for given duration
mode = always | auto | never
--set_network_mode mode duration
--set_proxy_settings
--run_benchmarks
--read_global_prefs_override
--quit
--read_cc_config
--set_debts URL1 std1 ltd1 [URL2 std2 ltd2 ...]
--get_project_config URL
--get_project_config_poll
--network_available
--get_cc_status

ほとんど一緒っぽいですね。

○プロジェクト単位の操作
プロジェクト単位での操作は、
「boinccmd.exe --project <対象のプロジェクトのURL> <操作>」
というように行います。

「<操作>」で何を指定するかは、BOINC のコマンド・ツール(http://boinc.oocp.org/boinc_cmd.php)で 確認できます。


<操作>
* reset: 現在保持している仕事を削除してから、新しい仕事を取りに行きます。
* detach: 現在保持している仕事を削除します。 新しい仕事は取りに行きません。
* update: スケジューリング・サーバに接続します。
* suspend: プロジェクトの仕事を一時停止します。
* resume: プロジェクトの仕事を再開します。
* nomorework: 現在保持している仕事はやり遂げますが、それ以上の仕事は取りに行きません。
* allowmorework: nomorework の指示を撤回します。
BOINC のコマンド・ツール(http://boinc.oocp.org/boinc_cmd.php)の抜粋


例えば、「PrimeGrid」(URL:http://www.primegrid.com/)を更新する場合は
「>\boinccmd.exe --project http://www.primegrid.com/ update」
というように行います。



○タスク(ワークユニット)単位の操作
プロジェクト単位での操作は、
「boinccmd.exe --result <対象のプロジェクトのURL> <リザルト名> <操作>」
というように行います。

こちらも、「<操作>」で何を指定するかは、BOINC のコマンド・ツール(http://boinc.oocp.org/boinc_cmd.php)で 確認できます。

<操作>
* suspend: 指定したリザルトに対する計算を一時的に停めます。
* resume: 指定したリザルトに対する計算を許可します。
* abort: 指定したリザルトに対する計算を永久に止めます。
* graphics_window: ウィンドーにグラフィクスを表示します。
   オプショナルな引数 desktop/window_station (Windows向け) と display (X11向け)は、
   グラフィクスを表示する画面を特定する引数です。
* graphics_fullscreen: グラフィクスをフルスクリーンで表示します。
BOINC のコマンド・ツール(http://boinc.oocp.org/boinc_cmd.php)の抜粋


<リザルト名>は、
「>boinccmd.exe --get_state」
などを実行すれば、取得できます。
「--get_state」で取得する場合、「name」が<リザルト名>に相当します。

>boinccmd.exe --get_state

~ 略 ~

nn(ナンバー)) -----------
name: psp_sr2sieve_xxxxxxxx_x
WU name: psp_sr2sieve_xxxxxxxx
project URL: http://www.primegrid.com/
report deadline: xxxxxxxxxxxxxxxxx
ready to report: no
got server ack: no
final CPU time: 0.000000
state: 2
scheduler state: 0
exit_status: 0
signal: 0
suspended via GUI: no
active_task_state: 0
stderr_out:
app version num: 0
checkpoint CPU time: 0.000000
current CPU time: 0.000000
fraction done: 0.000000
swap size: 0.000000
working set size: 0.000000
estimated CPU time remaining: 5485.386863
supports graphics: no

~ 略 ~


例えば、「PrimeGrid」(URL:http://www.primegrid.com/)の「pps_llr_extended_xxxxxxxxxx_x」というタスクを一時停止する場合は
「>boinccmd.exe --result http://www.primegrid.com/ pps_llr_extended_xxxxxxxxxx_x suspend」
というように行います。


【boinccmd を利用した処理のバッチ化】
「boinccmd」で何を行うかが分かれば、後はバッチ化するだけです。
バッチ化と言えば難しいですが、分かりやすく言えば、「やりたい処理(コマンド)を記述するだけ」です。

では、サンプルとして、「PrimeGrid」(URL:http://www.primegrid.com/)の更新を行うバッチを紹介いたします。


@echo off

rem 「boinccmd.exe」の保存先(デフォルトインストールの場合、「C:\Program Files\BOINC\」)
set boinc_cmd="%ProgramFiles%\BOINC\boinccmd.exe"

rem 対象プロジェクトの URL
set project_URL=http://www.primegrid.com/

rem boinccmd (update)の実行
%boinc_cmd% --project %project_URL% update

では、上記バッチを簡単に解説しておきます。

・「@echo off」
 バッチファイルの実行時にバッチファイルの記述内容などを標準出力に表示しない設定です。
 「@echo off」を記述しなくても動作しますが、「@echo off」を記述しないと、バッチファイルの記述内容が表示されて見にくくなります。

・「rem」
 「rem」はコメント行です。
 何をしているかなどをコメントとして残しておけば、今後、改修するときに役に立ちます。

・「set boinc_cmd="%ProgramFiles%\BOINC\boinccmd.exe"」
 「boinccmd」を実行するたびに毎回記述するのは面倒です。
 なので、「boinccmd」のフルパスを環境変数「boinc_cmd」に設定しています。
 「Program Files」のようにディレクトリ名の間にスペースが入る場合、「"」(ダブルコーテーション)でディレクトリ名を括っておきます。

・「set project_URL=http://www.primegrid.com/」
 プロジェクトの URL を実行するたびに毎回記述するのは面倒です。
 なので、プロジェクトの URL を環境変数「project_URL」に設定しています

・「%boinc_cmd% --project %project_URL% update」
 上記で設定した「boinc_cmd」、「project_URL」の環境変数を利用して、「boinccmd」を実行しています。
 設定された環境変数を呼び出す場合、環境変数名の前後を「%」(パーセント)でくくります。
 この場合、「"%ProgramFiles%\BOINC\boinccmd.exe" --project http://www.primegrid.com/ update」が呼び出されて実行されます。





バッチファイルが作成できれば、後は、「タスクスケジューラ」(タスクスケジューラは管理ツールの中にあります)でタスク登録してあげれば、指定時間での自動実行が可能です。

「boinccmd」の注意点は、「投げ捨て型のコマンド」のようで、処理の終了を待ちません。
つまり、バッチで「boinccmd」を複数実行する場合、処理が完全に終了していない状態でも、次の「boinccmd」が実行される可能性があります。

「update」などを実行した場合、実行時にコマンドの文法チェックは行われますが、サーバとの更新が完了していない状態でも、バッチの次の処理が実行されます。


ですので、場合によっては、「boinccmd」が終了される時間を見越して「sleep」などをかますといいでしょう。
なお、Windows の標準では、「sleep」コマンドは提供されないので、リソースキットなどから入手する必要があります。
(お仕事で Server 2003 の構築時に「sleep」コマンドが無くて、リソースキットの CD と戯れた記憶があります。。。)


コメント
この記事へのコメント
URL :
コメント :
パスワード :
管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
Template designed by アクセラと+αな生活

Powered by .