AWS上で常時DiscordのBotを動かし、Botを常にログイン状態とする

前提

AWS上で常時DiscordのBotを動かし、メンバーのロールの管理を行おうとしています。
プログラム自体はできており、フォアグラウンドでbotを起動し動作の確認は問題ないのですが「常時起動する」という部分で詰まっております。

実現したいこと

AWS上で常時DiscordのBotを動かし、Botを常にログイン状態とする。

発生している問題・エラーメッセージ

エラーは特にないので、試したこと部分にやったことを記載します。

該当のソースコード

Ruby

1# bot.rbファイル(プロジェクト内に配置)2clas 3 4 # BOT情報5 BOT_TOKEN = "XXXXXXXX"6 BOT_CLIENT_ID = YYYYYYYYYY7 BOT_CLIENT_SECRET = "ZZZZZZZZ"8 9 def initialize10 @bot = Discordrb::Commands::CommandBot.new(11 token: BOT_TOKEN,12 client_id: BOT_CLIENT_ID,13 prefix: '!'14 )15 end16 17 def start18 settings 19 @bot.run 20 end21 22 def settings23 ## この中にロール管理についていろいろ24 end25 26end27 28discordBot = DiscordBot.new29discordBot.start 30 31 32

試したこと

エラーはないのですが、「該当のソースコード」のようにプロジェクト内にbot.rbを配置し、
$ bundle exec rails runner bot.rb

で起動すると
Running via Spring preloader in process 24196
[INFO : websocket @ 2023-01-23 06:52:22.182] Discord using gateway protocol version: 6, requested: 6

となり、Botが起動、ログイン状態となります。

これをデーモンで動かしたいので、
$ bundle exec rails runner bot.rb &

としてバックグラウンドで動かしても、テラタームを切断した1時間後くらいにBotはログアウトしてしまいます。

nohupを付けるという記事も見かけたのですが
$ nohup bundle exec rails runner bot.rb &

で動かそうとすると、
Running via Spring preloader in process 24196
[INFO : websocket @ 2023-01-23 06:52:22.182] Discord using gateway protocol version: 6, requested: 6

のメッセージが出ずbotが立ち上がりません。

また
https://www.codereading.com/nb/ignore-sighp-with-disown.html
を参考に

$ bundle exec rails runner bot.rb &

で起動後
$ disown -h [jobspec]

でテラタームとの切り離しもやってみたのですが、やはり1時間後くらいにログアウト状態となってしまいます。

適切な方法をご教示いただけますと幸いです。
以上、よろしくお願いいたします。

コメントを投稿

0 コメント