【人狼知能】ログファイルの出力場所を日付と時刻によって自動で変更する

人狼

こんにちは。

今日は,人狼知能について,MacでAutoStarter.shを実行したときに生成されるログファイルの出力場所を,日付と時刻によって自動で変更するようにする方法を書きます。

実行するたびにログファイルの出力場所(フォルダ名)を変更しないと,ログファイルが上書きされてしまいます。

それでは困るけど,いちいち変更するのは面倒だ,ということで,ログファイルの出力場所を,日付と時刻によって自動で変更するようにしたいと思います。

(毎度のことながら,もしかしたら,変なやり方をしているかもしれません。。。なにか問題が発生した際にも,私は責任をお取りできかねますので,ご了承くださいませ。)

(そして,記事内に正しくない表現などがあったらごめんなさい…。)

ちなみに

「人狼知能ってなに?」というかたは,こちら:人狼知能プロジェクトの公式サイト をご覧ください。

人狼ゲームをプレイする人工知能を「人狼知能」と呼んでいます。

人狼知能のエージェントは,JavaやPython,C#(.NET)で作成することができます。

環境

  • Macで実行しています。
  • 人狼知能プラットフォーム ver. 0.6.2 を使っています。
  • 今回は,人狼知能プラットフォームのフォルダ(AIWolf-ver0.6.2)の中にある「AutoStarter.sh」を書き換えて,意図する動作をさせたいと思います。

シェルスクリプトのファイルを書き換えますが,私は まったくの初心者なので,正しくない表現があるかもしれません。シェルスクリプトの文法などの詳細については,信頼できる情報源をご参照いただければと思います。m(_ _)m

AutoStarter.sh の変更

AutoStarter.sh は,設定ファイル「Autostarter.ini」を参照しています。

その「Autostarter.ini」において,ログファイルの出力場所が指定されています。

今回は,AutoStarter.sh の実行時に,日付と時刻を取得して,Autostarter.ini のログファイル出力場所指定の部分を書き換えるようにしたいと思います。

シェルスクリプトでは,date というコマンドで日付や時刻を取得できるとのこと。

ということで,AutoStarter.sh を次のように書き換えます。

id=$(date +"%Y-%m-%d_%H%M%S")
sed -e "s@./log/@./log/${id}/@" ./AutoStarter.ini > tmp
java -cp aiwolf-server.jar:aiwolf-common.jar:aiwolf-client.jar:aiwolf-viewer.jar:jsonic-1.3.10.jar org.aiwolf.ui.bin.AutoStarter tmp
read Wait
  • 1行目で,id という変数に「2020-10-24_161318」という形式の文字列を格納しています。(2020年10月24日16時13分18秒という日付・時刻の例です。)(ハイフンやアンダーバーの有無や位置は,お好みで変更していただいても動作すると思います。)
  • 2行目では,(AutoStarter.sh と同じディレクトリにある)AutoStarter.ini を読み込んで,その中の「./log/」を「./log/id/」(id には 1行目で定めた文字列が代入されます)に置き換えた後のファイルを「tmp」として出力しています。

./log/」を「./log/id/」に置き換えることにしていますので,AutoStarter.ini のログファイル出力場所指定の部分が次のようになっている必要があります。

log=./log/

AutoStarter.ini(のおそらく2行目)の log= の後の部分が上のとおりになっていない場合は,上のように AutoStarter.ini を書き換えていただくか,あるいは ご自分の log= の部分に合わせて AutoStarter.sh の書き換え部分の "s@./log/@./log/${id}/@" を書き換えてください。ここでは区切り文字としてアットマークを使っています。1つ目の @ と2つ目の @ に挟まれた部分「./log/」を,ご自分の log= の部分に合わせて書き換えることになるかと思います。(s@aaa@bbb@ は,aaa⦅1つ目の @ と2つ目の @ に挟まれた部分⦆に一致する最初の箇所を bbb⦅2つ目の @ と3つ目の @ に挟まれた部分⦆に書き換える,というスクリプトになっています。)

  • そして,3行目で,さきほど作った「tmp」を設定ファイルとして,人狼知能サーバーを実行しています。

AutoStarter.sh をこのように書き換えることで,意図した動作(日付と時刻を含んだ名前のフォルダにログファイルが出力されること)がされるようになると思います。

まとめ(?)

今回 AutoStarter.sh に施した変更は,以下のとおりです。

  • ファイルの最初に,日付・時刻を文字列として変数 id に格納する行を追加する。
  • AutoStarter.ini のログファイル出力場所の部分を,id を使った場所に書き換えて,新しい設定ファイル「tmp」として出力する行を追加する。
  • java -cp ……」の行(上の2行を追加する前に AutoStarter.sh の1行目にあったもの)の最後(「AutoStarter.ini」)を,tmp に変更する。

シェルスクリプトはよく知らなかったので,いろいろな記事を参考にさせていただきました。ありがとうございます。

今回の記事は以上になります。つたない文章で すみません;;;

お読みいただきありがとうございました!

コメント

タイトルとURLをコピーしました