Docker上のbotを監視・再起動する方法

f:id:IsThisAPen:20220206212942p:plain
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