はじめに
Discord Botを運用していたとき、なんかメッセージが2回送られているなと思って調べてみたら、なんとBotが二重起動していました。
二重起動していると、メッセージが2回送られてしまうだけでなく、YouTubeのAPIの利用回数が2倍になってしまうなど、いろいろと問題が発生してしまいます。
というわけで、なぜ二重起動しているのかを調査してみました。
なぜ二重起動しているのか
原因が全く分からないので、とりあえずログを見てみることにしました。
docker compose logs
で確認してみると、以下のようなものを見つけました。
bot-1 | 2025-03-11 23:49:19 INFO discord.client logging in using static token
bot-1 | 2025-03-11 23:49:20 INFO discord.gateway Shard ID None has connected to Gateway (Session ID: XXXXXX).
bot-1 | (botの名前) is ready!
(中略)
bot-1 | 2025-03-13 17:42:25 INFO discord.gateway Shard ID None session has been invalidated.
bot-1 | 2025-03-13 17:42:31 INFO discord.gateway Shard ID None has connected to Gateway (Session ID: YYYYYY).
bot-1 | (botの名前) is ready!
(後略)
Shard ID None session has been invalidated.
つまり、シェアされたIDが無効になったということです。
その後新しいセッションIDで再接続され、botが再起動している事がわかりました。
原因について
今のところ全くわからないです。通常ならセッションは定期的に更新されるので、おそらく更新の際に何らかのエラーが起きた、ということだと考えています。
Dockerで動かしているので、そのことも関係しているかもしれません。
対処法
二重起動していそうな挙動をしていたら、Dockerコンテナをdown
して再起動をすることが効果的だと思いました。定期的にログを見て、起動時の処理が2回以上行われているかを確認すると良いと思います。
できれば、ログを監視して、二重起動が発生した際に通知を送るような仕組みを作ると良いかもしれません。
おわりに
今回は、Discord Botがなぜか二重起動している件について調査してみました。
原因はまだ詳しく分からず、対症療法しかできないので、今後もこういった事態が続くようなら本腰を入れて調査してみようと思いました。
それではまた。