前提
AWS上で常時DiscordのBotを動かし、メンバーのロールの管理を行おうとしています。
プログラム自体はできており、フォアグラウンドでbotを起動し動作の確認は問題ないのですが「常時起動する」という部分で詰まっております。
実現したいこと
AWS上で常時DiscordのBotを動かし、Botを常にログイン状態とする。
発生している問題・エラーメッセージ
エラーは特にないので、試したこと部分にやったことを記載します。
該当のソースコード
Ruby
1# bot.rbファイル(プロジェクト内に配置) 2clas 3 4 # BOT情報 5 BOT_TOKEN = "XXXXXXXX" 6 BOT_CLIENT_ID = YYYYYYYYYY 7 BOT_CLIENT_SECRET = "ZZZZZZZZ" 8 9 def initialize 10 @bot = Discordrb::Commands::CommandBot.new( 11 token: BOT_TOKEN, 12 client_id: BOT_CLIENT_ID, 13 prefix: '!' 14 ) 15 end 16 17 def start 18 settings 19 @bot.run 20 end 21 22 def settings 23 ## この中にロール管理についていろいろ 24 end 25 26end 27 28discordBot = DiscordBot.new 29discordBot.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時間後くらいにログアウト状態となってしまいます。
適切な方法をご教示いただけますと幸いです。
以上、よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー