私はいつも実行する必要があるPython / JSサーバーコンボを持っています。 Pythonサーバーは1GBのRAMを搭載したサーバーで実行されるため、簡単にクラッシュします。
私は毎分実行するようにcrontabに設定された "monitor.sh"というスクリプトを作成しましたが、Pythonサーバーを再起動しようとするたびに失敗するようです。
私はそれが走っていることを知っています、実行されるたびに残されたタイムスタンプで実行されていることを確認できます。
モニター.sh
#!/bin/bash
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/var/www/site.com
echo "CHECKING" >> /var/www/site.com/monitor.log
pidof python3 >/dev/null
if [ $? -ne 0 ] ; then
echo "Restarting Python App: $(date)" >> /var/www/site.com/monitor.log
screen -dmS python_server python3 /var/www/site.com/app.py
fi
pidof nodejs >/dev/null
if [ $? -ne 0 ] ; then
echo "Restarting Inferno Server: $(date)" >> /var/www/site.com/monitor.log
screen -dmS inferno_server nodejs /var/www/site.com/render_server.js
fi
予約されたこと--(crontab -e
一般ユーザーの場合)
* * * * * /var/www/site.com/monitor.sh
ログに「Restarting Python App」が表示され、何も起こりません。出力を記録しようとすると、> out.txt 2> errors.txt
結果は出ません。
これまでは機能していないもの:
- システムレベルのcrontabの使用
- sudoを使用したサーバーの実行
chmod +x
すべてのファイルに使用chmod -R 755
すべてのファイルに使用/usr/bin/python3
直接電話するos.chdir()
Pythonスクリプトで使用
働くもの:
- アプリケーションを手動で実行
- 手動でスクリプトを実行する
- 他のPythonファイルを使用してスクリプトを実行する
- 必要に応じて他のJSサーバーを監視して再起動します。
サーバーはGunicornを使用するBottle.pyのインスタンスです。
ここで実際に何が起こっているのかを調べる方法はありますか?確認できるログファイルはありますか?それとも実際にコマンドからエラーを取得する方法はありますか?
答え1
私はこれがあなたが要求するものではないことを知っていますが、あなたのアプローチはあまりにも厳しいようです。画面がスクリプトで動作するようになっているかどうかはわかりません。今はテストするコンピュータがありません。
Supervisord を使用してサービスを監視して再起動することをお勧めします。
答え2
UpstartまたはSystemdを使用することをお勧めします。ディストリビューションのバージョンによっては、Ubuntu/Debian/CentOS にプレインストールされています。以前のシステムにはSystem Vがあります。