crontabを使用してプロセスを監視し、実行されていないときに再起動してください。

crontabを使用してプロセスを監視し、実行されていないときに再起動してください。

私はいつも実行する必要がある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があります。

関連情報