botを自動再起動させて、ほったらかし運用する
過去日記から抜粋して記事にした、自分用メモの抜粋なので記事は丁寧ではない。
更新:2018年8月28日
CCXT他、ネット経由でデータを取ってくる処理でエラー多発、しょっちゅうbotが停止するので自動再起動してくれるのを追加
以下、ubuntuでの設定です
supervisor version3
python2対応なのでpipではなく、apt install で、いれる。自動再起動させたいbotは、python3.4で記述している。
sudo apt install supervisor
注意点は .confファイル作成と、起動の仕方
デーモン起動はすんなりだが、その後の管理用プロセス起動にクセあり
親デーモンの起動
sudo service supervisor start
親デーモンの再起動
sudo service supervisor restart
状況確認
sudo service supervisor status
管理用デーモンの起動、コンフィグファイルの指定必須、なしだとエラーになる
supervisorctl -c /etc/supervisor/supervisord.conf
プロンプト表示に変わるので
status
稼働状況確認、稼働していれば、その旨とプロセス番号と稼働時間が表示される
稼働はユーザー指定しなければ、親デーモンと同じくrootで稼働する。
reread
新定義あればこれで読み込み、のみ。設定反映させるなら updateを使う。
start all
定義フォルダ(/etc/supervisor/conf.d)の中に記述してる.confファイルを読み込んで起動/再起動させる。同時起動になることに注意。
# 停止
stop 登録名
# 一括停止
stop all
# 再起動
restart 登録名
追加をしようとして次のエラーがでた
spawn error
ぐぐってわかったのは、起動したいプログラムのパスが見つからない
confファイル作成時に他に注意すべきなのは
1行目、[program:ラベル名前を変更]
2行目、起動パス
まんなかあたりの、ログファイル名
エラーログ等がたまるのはここ
/var/log/supervisor/
ユーザー定義ファイルに次の1文を追加。目的は子プロセスまで面倒を見る。orderbookLのアプリを動かすと子プロセスが4つ動く。この子プロセスは親がこけても残り、結果、親はゾンビプロセスになってしまって再起動が自動で行われない。これを回避したいので追加した。
stopasgroup = true
公式マニュアル
http://supervisord.org/running.html
参考サイト
追記:子プロセスまで制御する定義追加
https://qiita.com/yushin/items/15f4f90c5663710dbd56
http://monakaice88.hatenablog.com/entry/2017/02/01/071024
http://swfz.hatenablog.com/entry/2015/12/16/214435
管理用コマンド解説
http://papix.hatenablog.com/entry/2015/08/05/131113