前提
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 コメント