Farming PCは退院してきましたが、再起動は持病として持ったままです。
はい、まだ原因は仮判定ですが、Windowsアプリ安定度向上待ちですよね。
はい。でもその間も可能な限りPlot続けたい。なので勝手に再起動してもそれなりに自動Plot続けるバッチを作りました。
すごいですね!自動で、Plotはじめてくれるんですか?
はい。説明します。まずここを参考にして起動時に自動ログイン設定します。Windows 10 ver.2004以降をクリーンインストールした場合(現在の新PCはたいていそうでしょう)はレジストリ変更まで必要となりますが、やってしまいます。
おー、ちょっと怖いですが、再起動病とつきあっていくためには仕方ないですね・・・
次に、この菜園のFaming PC構成紹介です。
PCIe Gen4のCFD-SSDと980proを1本ずつさして4並列Plotします。1TB-SSDの中はそれぞれの並列Plotごとにフォルダをわけます。
D:の中にD:\tmp-CFD1とd:\tmp-CFD2を、E:の中のE:\tmp-pro1-1とE:\tmp-pro1-2があるということですね。
980proは今、2本持っているので、tmp-pro1-1, tmp-pro1-2, tmp-pro2-1, tmp-pro2-2 と分けて使っています。
Plot途中で再起動がおこったり、Plot止めた場合、一時SSDに途中結果が残っています。これをちゃんと消してから次のPlotを始めないとSSD容量溢れてPlot出来なくなります。並列Plot進行中でも問題のあったPlot側だけ一時ファイルを消すのにフォルダを分けておいた方が便利です。
了解です!
さらに出力HDDも四つ使っています。
CFD1とCFD2、pro1-1とpro1-2は同じにしない方がいいのですか?
いろいろ実験してみた結果、Plot後の最終イメージのSSDからHDDへのコピー書き出しは通常10分くらいです。しかしちょうど同じタイミングで同じHDDに書き込むと30分に伸びてしまいます。時間差つくって10分ずらせばいいのですが、HDDたくさんあるのでここでは分けました。
この構成を頭にいれて次のWindows batファイル(plot-CFD1.bat)を見てください。ここのバッチファイルを参考に作りました。
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
@echo off if "%1" == "" goto PARAM_ERROR echo %1回 Plot します。 rem ドライブとディレクトリ名を間違えないように rem エクスプローラーからコピペした方がいい set ssdpart=CFD1 set chiatemp=D:\tmp-CFD1 set chiaplot=F:\CFD1 if NOT EXIST %chiatemp% goto NOT_FOUND_ERROR_TEMP if NOT EXIST %chiaplot% goto NOT_FOUND_ERROR_PLOT echo 一時ファイルを消しています: %chiatemp% del /q %chiatemp%\* c: cd C:\Users\<ユーザー名>\AppData\Local\chia-blockchain\app-1.1.6\resources\app.asar.unpacked\daemon rem 1時間 ... 3600 rem echo 1時間30分まちます rem timeout /t 5400 setlocal ENABLEDELAYEDEXPANSION for /l %%n in (1,1,%1) do ( set time2=!time: =0! set datetime=!date:~0,4!!date:~5,2!!date:~8,2!-!time2:~0,2!!time:~3,2!!time:~6,2! echo !datetime! echo ---------- echo %%n/%1 回目のPlot set logfile=C:\log\%ssdpart%-!datetime!.log echo logfile = !logfile! chia.exe plots create -k 32 -b 4000 -r 4 -u 128 -t %chiatemp% -d %chiaplot% -n 1 >> !logfile! 2>&1 rem あまり速く回りすぎないように1秒待つ timeout /t 1 ) endlocal echo 完了! exit /b :PARAM_ERROR echo パラメーターエラー:Plot回数を指定してください exit /B :NOT_FOUND_ERROR_TEMP echo %chiatemp%が存在しません。 exit /B :NOT_FOUND_ERROR_PLOT echo %chiaplot%が存在しません。 exit /B |
うわ~、私には複雑に見えます。
説明しますね。最初にC:\log(ログファイル置き場)は作っておいてください。Plot回数が指定されていない、フォルダがない、などエラー対応も入っています。
起動するときは下記のようにPlot回数をパラメータとして指定します。
1 |
C:\bat> .\plot-CFD1.bat 10 |
下記部分を構成済みながら適切に変えて、plot-CFD1.bat(上記)、plot-CFD2.bat, plot-pro1-1.bat, plot-pro1-2.batを作ります。
1 2 3 4 5 |
rem ドライブとディレクトリ名を間違えないように rem エクスプローラーからコピペした方がいい set ssdpart=CFD1 set chiatemp=D:\tmp-CFD1 set chiaplot=F:\CFD1 |
先行してPlotするのが、plot-CFD1.batとplot-pro1-1.batになるので、plot-CFD2.batとplot-pto1-2.batは下記 rem をとって1時間半自動で待つようにしてください。
1 2 3 |
rem 1時間 ... 3600 rem echo 1時間30分まちます rem timeout /t 5400 |
ちょっと前後しますが、下記パートで再起動時、SSDにのこった 一時ファイル消しています。
1 2 |
echo 一時ファイルを消しています: %chiatemp% del /q %chiatemp%\* |
ChiaのCLI(コマンドラインインタフェース)コマンドを実行するのに、chia.extが置いてあるパスに移動します。<ユーザー名>とapp-1.1.6(Chiaのversionに対応)は適時置き換えてください。
1 2 |
c: cd C:\Users\<ユーザー名>\AppData\Local\chia-blockchain\app-1.1.6\resources\app.asar.unpacked\daemon |
次からすこし技巧的になります。
ここまではなんとかついて行けてます!
1 2 3 4 |
setlocal ENABLEDELAYEDEXPANSION for /l %%n in (1,1,%1) do ( rem ループのなかで変数がへんかするような処理 ) |
1 |
「setlocal ENABLEDELAYEDEXPANSION」はループの中で変数が変化する(ここではログファイル名が変化、日付と時刻をいれています)場合の常套句、呪文だと思ってください。あと「for /l %%n in (1,1,%1) do (」も1から「%1(ばっちき同時の1番目のパラメータ)」までループする場合の常套句です。もし無限ループさせたい場合には「for /l %%n in (0,0,0) do (」とします。 |
うーん、とりあえずこういうものだと覚えちゃいます。でもWindows DOSバッチはわかりにくいですね。
そうなんですよ、庭子ちゃんが生まれる以前、数十年前のMS-DOSの時に生まれたバッチコマンドなので仕方ありません。その後継にPowershellスクリプトもありますが、これもまた、なかなかわかりにくい。いまだとPythonなどで書きたくなりますね。
次のポイントはここ、ログファイルにPlot起動した時点の日付と時間を入れ込むところです。ここがループないで変化するため、先ほどの「setlocal ENABLEDELAYEDEXPANSION」という呪文が必要になってました。
1 2 3 |
set time2=!time: =0! set datetime=!date:~0,4!!date:~5,2!!date:~8,2!-!time2:~0,2!!time:~3,2!!time:~6,2! echo !datetime! |
なんですか!、これ?まったく意味がわかりません。
その時の日時で、たとえば2021年5月30日、22時7分、57秒だったら「20210530-220757」こんな文字列を作ってくれます。詳細はここを参照してください。中身わからなくて結構です。便利なのでこう書いておけば%datetime%変数に入っているんだと覚えてください。
はい、了解です!理解は無理です。頭が拒否してます。
1 |
chia.exe plots create -k 32 -b 4000 -r 4 -u 128 -t %chiatemp% -d %chiaplot% -n 1 >> !logfile! 2>&1 |
そして chia.exe コマンドでPlotしています。K=32, メモリは4000、スレッドは 4 です。-tでSSD添付フォルダを、-dでHDDの最終Plot置き場をしてしています。詳細は公式CLI Commands Referenceを参照してください。最後の「>> !logfile! 2>&1」で日時入りログファイルに実行ログを保存しています。ChiaをGUIで実行するとログファイルがちゃんと作られていました。ChiaのCLI(コマンドラインインタフェース)では実行ログが表示されるだけで流れて言ってしまいます。表示文字をログファイルとして保存するおまじないだと思ってください。
ちなみにCLI、chia.exeコマンドはGUIで登録したユーザーアカウント情報、ウォレット情報を参照して実行されます。明示的にしたいしたい場合は先のCLI Commands Referenceを参照してオプション指定してください。
呪文やおまじないが多いですぅ~。でも、とりあえず了解です。
ごめんねぇ~、Windowsバッチコマンドは古いからねぇ、なかなか面倒なんだ。そのうちもっと理解しやすいプログラミング言語で整備したいですね。
これでだいたい説明できました。先にいったようにこのバッチファイルをフォルダなど変えて4つ作ります。
plot-CFD1.bat(上記)、plot-CFD2.bat, plot-pro1-1.bat, plot-pro1-2.batですね。
はい、そうです。そして再起動時に、Chiaを起動して、この四つのバッチを起動する全体スタートバッチをもう一つ作ります。これも<ユーザー名>とapp-1.1.6は適時変更してください。
1 2 3 4 5 6 7 8 9 10 11 |
@echo off c: cd C:\Users\<ユーザー名>\AppData\Local\chia-blockchain\app-1.1.6\resources\app.asar.unpacked\daemon chia.exe start farmer start "c:\bat\" "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "c:\bat\plot-pro1-1.bat 100" start "c:\bat\" "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "c:\bat\plot-CFD1.bat 100" start "c:\bat\" "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "c:\bat\plot-pro1-2.bat 100" start "c:\bat\" "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "c:\bat\plot-CFD2.bat 100" |
chia.exeの置いてあるフォルダに移動して、「chia.exe start farmer」でchiaをCLI(コマンドラインインタフェース)で起動します。full-node, Server, ウォレット、耕地管理など全てが起動されます。このあとChia GUIをきどうすると管理が引き継がれます。(GUIを終了するとfull-node, Serverなども停止するため、必要なら再実行します)
「start」コマンドは「start <実行フォルダ> <実行プログラム> <パラメータ>」と指定して、並行実行させる事ができます。ここでは”c:\bat\” のフォルダで、Powershellを実行しなさい、Powershellのなかでは”c:\bat\plot-pro1-1.bat 100″(100 回Plot指定)を実行しなさい、と指定しています。それを4つのバッチ分記述しています。
Powershellを4つ起動して、その中で別々に先ほどのバッチファイルを実行させるのですね。
最後に、このstart-chia.batのショートカットをWindowsスタートアップフォルダにおけば完成です。エクスプローラーに「shell:startup」と入力しENTERを押してください。スタートアップフォルダが表示されます。ここにさきほどのstart-chia.batのショートカットをおきましょう。
これで完成です。お疲れ様でした。
長かったですねぇ~
はい。再起動時に自動実行された画面がこれです。
通常、Powershell起動すると下記のような青いコマンドウィンドウになのですが、この方法だと黒いコマンドウィンドウになるようです。
本当だ。Powershellコマンドウィンドウの色が違いますね。黒いとDOSコマンドプロンプトのように見えてしまいます。
これで再起動病が発動しても、なんとかPlotしてくれる環境が整いました。再起動されちゃうとやり直しのペナルティあるのですが、何もしてない時間を極力排除できたかと思います。これでどんどんPlotして貰いましょう!
菜園がおおきくなるといいですね。楽しみです。