【Splatoon2】試合結果を stat.ink へ自動送信するスクリプトをサーバーで常時稼働させる方法

splatnet2statink.py はスプラトゥーン2の試合結果を任天堂のイカリング2から取得して stat.ink に送信してくれる、UNIX 系サーバーで動く Python スクリプトです。

詳しくは別記事で : splatnet2statink.py でスプラトゥーン2の試合結果を stat.ink へ自動送信しようの巻【転載】

とても便利なスクリプトなのですが、自動的に常時稼働してくれるような機能はないので、systemdを使ってデーモン化してみました。

サーバーやLinuxについての知識がある程度ある方でないと難しいと思うので、よくわからない方は無難に SquidTracks というツールを使いましょう。

参考記事様 : SquidTracks+stat.inkで対戦結果を自動的にWeb保存・公開してみた – Splatoon2 完全攻略データベース

 

created by Rinker
¥4,517 (2019/07/21 17:10:42時点 Amazon調べ-詳細)

 

環境

  • サーバー : AWS EC2
  • OS : Amazon Linux 2 (たぶんCentOS 7に近い)
  • Python : 2.7.10 (OSデフォルト)

systemdは最近のLinuxじゃないと使えないみたいです。例えばCentOS 7以上、Ubuntu 15.04以上が必要。

 

サーバーを用意

自分のサーバーを持ってない人はサーバーの契約から始めましょう。

確かこのスクリプトの依存ライブラリに管理者権限が必要なものがあるので、rootにアクセスできるサーバーでないといけないので、そこいらのレンタルサーバーを借りてもこのスクリプトは動きません。

僕も使ってる AWS EC2 (Amazon Web Services の Elastic Compute Cloud という仮想サーバーサービス)だと新規登録後1年間は無料で使える無料枠がありますし、GCP GCE (Google Cloud Platform の Google Compute Engineという仮想サーバーサービス)はずっと無料で使える枠があるらしいのでどっちかをつかえばいいでしょう。Azure はよく知りません。

EC2の場合、EC2のインスタンス(仮想サーバー)を立てた後、ssh でログインできるようにセキュリティー設定を変えれば、サーバーの設定は完了です。やり方はここに書くと長くなるので「EC2 ssh」などでググって調べましょう。

 

とりあえずsplatnet2statink.pyが動く環境を作る

参考記事 : splatnet2statink.py でスプラトゥーン2の試合結果を stat.ink へ自動送信しようの巻【転載】

サーバーにsshログインして色々やります。ここを見て頑張りましょう。

僕はホームディレクトリに直接git cloneしたので、/home/USERNAME/ に splatnet2statink フォルダが入っている状態です。

 

splatnet2statink.py のコマンドラインオプションを確認

$ cd ~/splatnet2statink
$ ./splatnet2statink.py --help
splatnet2statink v0.2.28
usage: splatnet2statink.py [-h] [-M [N]] [-r] [-s] [-t]

optional arguments:
  -h, --help  show this help message and exit
  -M [N]      monitoring mode; pull data every N secs (default: 300)
  -r          retroactively post unuploaded battles
  -s          don't post scoreboard result image
  -t          dry run for testing (won't post to stat.ink)

-Mオプションでモニタリングモードを起動させればいいみたいですね。
さらにその後何秒ごとにデータを取得するかの指定ができるみたいですが、今回はデフォルトでいいでしょう。

 

とりあえず -Mオプション付けて起動してみる。

$ ./splatnet2statink.py -M
splatnet2statink v0.2.29
Waiting for new battles... (checking every 5 minutes)
Press Ctrl+C to exit. 270

バックグラウンドで動くタイプではなく、Ctrl+C などで終わらせないとコマンドが終了しないようなタイプのようですね。

このようなタイプはshellをずっと起動させとかないといけない(多分)などの理由から、使いにくくてあんまり好きじゃありません。

これをsystemdを使ってデーモン化することで、バックグラウンドで動かしていきましょう。

 

systemdの設定ファイルを作る

/etc/systemd/system に移動し、以下のファイルを作ります。

[Unit]
Description=splatnet2statink

[Service]
WorkingDirectory=/home/USERNAME/splatnet2statink
ExecStart=/home/USERNAME/splatnet2statink/splatnet2statink.py -M
Restart=always
PIDFile=/var/run/splatnet2statink.pid
User=USERNAME

[Install]
WantedBy=multi-user.target

splatnet2statinkへのパスやらユーザー名やらは自分の環境に合わせて設定してください。

それぞれの項目の意味を少し説明すると

  • WorkingDirectory に作業フォルダを指定 (これを指定しないと動きませんでした)
  • ExecStart に実行するスクリプトファイルへの絶対パスとオプションを指定
  • Restart=always とすることで、プロセスが終了しても自動的に再起動してくれる
  • Type=simple を指定するか何も指定しないことで、-Mオプションを付けて起動した状態のように、Ctrl+C などで終わらせないとコマンドが終了しないようなものに対応。

詳しくは「systemd 設定ファイル」とかで検索すれば出てくるので気になる人や設定をいじりたい人は調べてみるといいでしょう。

 

サービス起動 & 再起動時に自動起動設定

$ sudo systemctl start splatnet2statink
$ sudo systemctl enable splatnet2statink

これで設定は完了です。

試しにナワバリやガチマをやってみてください。試合が終わって最大5分経った後、stat.ink に試合の情報が反映されていたら成功です。

 

 

メンテナンス (2018/3/14追記)

あれ?stat.inkに自動反映されてない?スクリプト止まった?ってなった時はsshログインして作業が必要です。原因は以下の2つ。

splatnet2statinkのアップデートによるサービス起動失敗

通常の方法でsplatnet2statink.pyを実行してアップデートが終わると、サービスでの起動も成功するようになります。

iksm_sessionの有効期限切れ

iksm_session文字列には有効期限(1週間程度?)があり、それが切れると再取得が必要です。
再取得したiksm_sessionはconfig.txtの中のcookieに設定してあげましょう。

サービス再起動コマンドは sudo systemctl restart splatnet2statink です。

コメントを残す

メールアドレスが公開されることはありません。