botを運用していると,いつの間にか止まってしまうことがあります.
今回は,Docker上のbotが止まったときに,自動的に再起動するスクリプトをつくりました.
前提と動作
Dockerのlogを監視し,logを出力しなくなったらコンテナを再起動します.- Dockerを使っていること
- 定期的に,logを出力するようになっていること(走らせているプログラムが,定期的に何か
print
すれば良いです) - 「botが停止している⇔logが出力されない」であること
コード(Python)
時間は,実行環境に合わせて変えてください.import subprocess import time from datetime import datetime CONTAINER_ID = '監視するコンテナIDを入れてください' print('start:' + str(datetime.now())) while True: process = (subprocess.Popen('docker logs ' + CONTAINER_ID + ' --since="1m"', stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8') if not process: process = (subprocess.Popen('docker restart ' + CONTAINER_ID, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8') print('restart docker:' + str(datetime.now())) time.sleep(60)
【参考にしたもの】
参考情報
richmanbtcさんの実装です.停止しない自動売買ボットの作り方。python 3|richmanbtc|note