PR
PR

XServerでDiscord Botを運営する方法|起動・停止・24時間稼働まで解説

PR
Discord
PR

当記事では、当サイトが運営しているbotをXServer上で管理している件について、役立ちそうなこと3選として

  • XServerでPython環境を構築する方法(競合サイトがあるのでざっくりめ)
  • Discord Botをバックグラウンドで起動する方法
  • Bot停止時に自動再起動する方法

をご紹介します。

Discord Botの開発運営または、プライベートでbotの運営をXServerで行いたい方は是非参考にして下さい。

PR

XServerではpipが使用できない件

他サイトでも取り上げられていますが、XServerは初期の状態からpipコマンドを使用することができない場合があります。使用するにはanaconda等を導入する必要があります。(他にも代替案はありますが、私はanacondaを採用しました。)

ただし、anacondaはzipファイルのサイズが1GBを超えておりXServerのファイルマネージャから転送ができないため、自PCからsshでターミナル等から接続し、curlコマンドでインストール。

ターミナル(windowsはteratermがおすすめ)から接続するには、予め「公開鍵・秘密鍵のペア」を生成しておく必要があります。鍵の生成は

 サーバー>SSH設定>「+公開鍵を登録」

から行えます。

その後は、sh実行→「conda install pip」でpipが使用可能となります。

PR

XServerでDiscord Botを起動、シャットダウンする方法

まず、開発したDiscord BotのPythonファイルをファイルマネージャの任意の場所に格納します。

(例)
/discord/f/main.py

そして、ターミナルからnohupで実行すればDiscord Botは起動します。この時、pythonはanacondaのpythonを使用する点に注意が必要です。

×:nohup python /home/****/discord/f/main.py > output1.text &
◯:nohup /home/****/anaconda3/bin/python /home/****/discord/f/main.py > output1.text &
  • nohup → SSH接続を切ってもプロセスを継続
  • python → AnacondaのPythonを指定
  • > output1.txt → 実行ログをファイルへ出力
  • & → バックグラウンドで実行

シャットダウンについては、killコマンドで実行可能です。killコマンドの使い方は様々ですが、最も簡単と言っても良い方法は

pkill -f main.py

です。

但し、複数のPythonプログラムを実行している場合は、意図しないプロセスまで停止する可能性があります。なので、ユニークなファイル名に変更することをお勧めします。
 →「discordBotMain01.py」など

PR

XServerでDiscord Botを24時間起動させる方法

XServer側のメンテナンス等も絡んでくるため、100%24時間駆動は難しいですが、
 ・停止したら自動的に起動
はshとcronを使えば実現できます。

まず、shを用意します。中身は以下コピペで一部書き換えるだけでOKです。知識があれば、logに書き込むなど処理を追記するのもgood。

因みにですが以下のshでは、まずpgrepでDiscord Botのプロセスが起動しているか確認します。起動していなければnohupでDiscord Botを再起動するものです。

start.sh

#!/bin/bash

# BotのPythonファイルのパス
SCRIPT_PATH="/home/****/discord/f/main.py"
PYTHON_PATH="/home/****/anaconda3/bin/python"

# main.py が動いているか確認(非稼働なら稼働させる)
if ! pgrep -f "$SCRIPT_PATH" > /dev/null; then
    nohup $PYTHON_PATH $SCRIPT_PATH > /dev/null 2>&1 &
fi

これを任意の場所へ格納します。

続いてcronの設定に移ります。cronは

 サーバー>Cron設定>「+Cron設定を追加」

から設定ができます。

あとは、何分間隔で監視するかをご自身で定義いただければと思います。(間隔が短すぎるとサーバーへの負荷が高まるので、10分間隔位が丁度良いかと思います。)

以下は一例ですが、cronはある程度融通のきく形でスケジューリングできます。

上記のように書くと、「スケジュール」欄に要約して書かれていますが、言い換えると
「毎時8分を起点に10分間隔でshを実施。但し4時台は除く」
という感じです。

cronの記述方法は少し独特なので、分からない場合は生成AIなどに「毎時○分から○分間隔で実行したい。但し○時○分は除外して」と伝えると、記述例を作ってもらえます。

まとめ

当記事では、XServerを用いてdiscordのBot開発を行ってみて個人的に詰まった所や、汎用性があると思った情報3点をご紹介しました。

他にもDiscord Bot開発で分からなかった点とか様々あるので、また別の機会に記事にしようと思います。

ご紹介

筆者はDiscordの運営をより良いものにするためのBotを無料公開しています。よければご自身が管理されているサーバーや、参加しているサーバーの管理者に問い合わせて導入してみてはいかがでしょうか。

よくある質問(FAQ)

Q
XServerでDiscord Botを24時間稼働させることはできますか?
A

はい、可能です。

nohupなどを利用してDiscord Botをバックグラウンドで起動し、さらにcronとシェルスクリプトを組み合わせることで、Botが停止した際に自動的に再起動させることができます。

ただし、XServer側のメンテナンスや障害などによってサーバー自体が停止する可能性があるため、文字通り「100%24時間稼働」を保証できるわけではありません。

Q
XServerでDiscord Botを動かす場合、Pythonは使えますか?
A

はい、使用できます。

XServerではPythonを利用できますが、標準の環境ではpipをそのまま利用できない場合があります。

本記事では、Anacondaを利用してPython環境を構築し、pipを利用できるようにする方法が分かりやすいため推奨しています。

また、当サイトが運営するDiscord BotもAnacondaを利用した環境で動作しています。

Q
XServerでDiscord Botを起動したままSSHを切断しても大丈夫ですか?
A

nohupを使用してバックグラウンドで起動していれば、SSH接続を終了してもBotを動作させ続けることができます。

通常のコマンド実行ではSSH接続を終了するとプロセスも終了してしまう場合がありますが、nohupを利用することでSSH接続とは切り離してBotを実行できます。

Q
XServerでDiscord Botを停止するにはどうすればいいですか?
A

killコマンドやpkillコマンドを利用できます。

本記事では、簡単な方法として以下のコマンドを紹介しています。

pkill -f main.py

ただし、同じ名前のPythonファイルを複数実行している場合、意図しないプロセスまで停止する可能性があります。

複数のBot(Bot以外のPythonプログラム含)を運用している場合は、対象を明確に指定して停止する方法を検討してください。

Q
Discord Botを複数XServerで運用できますか?
A

はい、可能です。(当サイトが運営する「大奈川Bot」「サイコロBot」は同じXServerで駆動しています。)

ただし、複数のBotを運用する場合は、それぞれのBotでPythonファイルのパスや起動用スクリプトを分けるなど、プロセスを区別できるようにしておくことをおすすめします。

特にpkill -f main.pyのようにファイル名を指定してプロセスを停止する場合、同じファイル名のBotが複数あると意図しないBotまで停止する可能性があります。

Q
XServerでDiscord Botを運用する場合、cronは必須ですか?
A

必須ではありません。

Botを単純に起動するだけであれば、nohupなどを利用してバックグラウンドで実行するだけでも問題ありません。

ただし、Botが何らかの原因で停止した場合に自動的に復旧させたいのであれば、cronとシェルスクリプトを組み合わせる方法が便利です。

Q
cronは何分間隔で設定すればいいですか?
A

本記事の方法であれば、10分間隔程度でも十分だと思います。

例えば10分間隔で監視すれば、Botが停止した場合でも、最大で10分程度で再起動される仕組みにできます。(XServerのメンテナンスが絡んだ場合は、10分以上停止する場合もあります)

ただし、監視間隔を短くしすぎるとcronの実行回数が増えるため、サーバーへの負荷なども考慮して設定してください。

Q
XServer以外でも同じ方法は使えますか?
A

はい。nohuppgrepcron、シェルスクリプトなどはLinux環境で広く利用されている仕組みなので、他のLinux系サーバーでも応用できます。

ただし、Pythonのインストール場所やユーザー権限、cronの設定方法などはサーバーによって異なるため、そのまま同じ設定が使えるとは限りません。

Q
XServerでDiscord Botを運用するメリットは何ですか?
A

すでにXServerを契約している場合、別途Bot専用のサーバーを用意せずに運用できる点がメリットです。

また、SSHから操作できるため、Python環境の構築やBotの起動・停止、自動再起動などを自分で管理できます。

一方で、Bot専用サービスではないため、サーバーの仕様やリソース制限などを確認したうえで利用する必要があります。

コメント

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