【mclo.gs】サーバーのログファイルを簡単に共有する方法
マインクラフトでクラッシュした時やトラブルが起きた時に、簡単にクラッシュログやサーバーログなどのファイルを共有するやり方を紹介する記事です。
結論(時間のない人向け)
latest.log
のところをログファイルへのパスに置き換えれば使えます。
curl -X POST -d "content=$(<latest.log)" https://api.mclo.gs/1/log
または
curl -X POST -d "content=$(cat latest.log)" https://api.mclo.gs/1/log
どうしてログファイルの共有を簡単にやりたかったのか
主に以下の理由です。
- マイクラサーバー運営時、Ubuntuのままだとログが読みづらすぎる
- MOD開発者に共有できない
- 誰かに助けてもらうときにログファイルを渡すのが面倒
となり、「簡単にやる方法ないのかな…」となったのが発端です。
とりあえずチャレンジ
mclo.gsのAPIの仕様を見て、mclo.gsに直接ubuntuサーバーなどのターミナルからログを上げてみます。
(これは動きません...)
curl -X POST -F 'content=./latest.log' https://api.mclo.gs/1/log
これだとファイル名だけがログとして上がってしまいます。迷惑な話。
友人(Bing AI)に助けてもらった
どうやら、いい感じにやる方法があるらしく、二つほど教えてもらいました。
Bashのリダイレクトを使う方法
curl -X POST -d "content=$(<latest.log)" https://api.mclo.gs/1/log
Catコマンドを使う方法
curl -X POST -d "content=$(cat latest.log)" https://api.mclo.gs/1/log
おまけ
動いたは動いたのですが、Bashのリダイレクトを使う方法の中に出てくる
"content=$(<latest.log)"
はどんな動きをしているのか気になったのでおまけで調べてみました。
説明
$()
- とほほのBash入門によると
-
$(...) または
...
の中にコマンドを書くと、コマンドの出力が文字列として扱われます。
<
- とほほのBash入門によると
-
command < file
fileの内容をcommandの標準入力に渡す
動きを考えてみる
<
を使用して、ファイルの中身を標準入力に渡す$()
によって、content=
の後に代入している
あとがき
今回、この記事を書いていて、「うーん…まだまだ、Bashに対する知識が少ないな:neko_thinking_nya:」と感じたので、サーバーを触ったりしていく中で、知識をつけていきたいなと思っています。
この記事は@sysnote8に手伝ってもらいました。お礼に全マシ二郎を奢る契約をしています。