前提・実現したいこと
discord.pyを使用して地震情報のDiscordBotを作っています。
常に反応できるように常時稼動させたく、自宅にあるSynologyのNAS(Linux)を利用して動かそうと思っています。
レンタルサーバー等を借りても良いと思うのですが、できるだけ無料に近い形で運用したいのでNASを利用しようと思っています。以前、Herokuを利用していたことがあるのですが、無料枠だとスリープしないので時間が足りなくなってしまうことがあったのであまり利用したくないです。
原因・解決策等教えていただきたいです。
サーバーのことについては、あまり詳しくなく的外れなことを聞いてしまっているかも知れませんが、回答していただけると嬉しいです。よろしくお願いします。
発生している問題・エラーメッセージ
- 4時間程で止まってしまう。(whileの部分に今の時間をファイルに記録するコードを書いた)
該当のソースコード
Python
1import discord 2import requests 3from bs4 import BeautifulSoup 4from collections import OrderedDict 5import asyncio 6import json 7import os 8 9TOKEN = "トークン" 10client = discord.Client() 11 12@client.event 13async def on_ready(): 14 with open('/*/result.txt', 'a') as f: 15 print(os.getpid(), file=f) 16 print('ログイン') 17 asyncio.ensure_future(eew()) 18 19async def eew(): 20 channel = client.get_channel('チャンネルID') 21 while True: 22 #緊急地震速報のAPIを叩き、変化があったらDiscordに送るプログラム(省略) 23 await asyncio.sleep(2) 24 25@client.event 26async def on_message(message): 27 if message.author.bot: 28 return 29 if message.content.startswith("地震"): 30 #震度情報を取得して、Discordに送るプログラム(省略) 31 32client.run(TOKEN) 33
一応、ソースコードを載せておきますが、あまり関係ないと思います。
試したこと
- Synologyのタスクスケジューラを利用し、一定時間おきにbashを実行しプログラムの再起動
→緊急地震速報の部分のループが実行されなかった。
0. SSHからコマンドに&
をつけ、バックグラウンドで実行
→4時間程で止まってしまっていた。
補足情報(FW/ツールのバージョンなど)
- Python 3.5.1
- discord.py==0.16.12(async版)
- Synology DS218j DSM 6.2.2