Skip to content

Instantly share code, notes, and snippets.

@kengonakajima
Created February 23, 2021 05:55
Show Gist options
  • Save kengonakajima/e4f5f76a76ddc1c45fa0ca183d2c07cc to your computer and use it in GitHub Desktop.
Save kengonakajima/e4f5f76a76ddc1c45fa0ca183d2c07cc to your computer and use it in GitHub Desktop.
starting server endless
簡易的なサーバー自動再起動の設定方法は、
サーバーの実行ファイルをシェルスクリプトから起動する。
シェルスクリプトの中で永久ループを使う。
endless.shを以下のように設定する
```
ulimit -n 4000 # なくてもいい。TCPのサーバーだと便利なときもある
while true; do
date # 起動の日付がログに残ってると便利
hostname # どのマシンかわからなくならないように
echo starting server..
./server_executable # 任意のサーバー実行ファイルを指定。バックグラウンド実行にしないのが重要。クラッシュ、シグナルまたは正常終了するまで待つ
sleep 2 # 少しスリープすることで、bind errorのときに超高速に再起動をし続けるのを防ぐ
done
```
リモートの作業用環境からsshし、 nohupコマンドとdisown指示の組み合わせを用いて起動する。
こうすることで、SSHが切断してもこのスクリプトは無限に再起動し続ける。
ssh voice03 'nohup bash endless.sh > nohup.3478.out 2>&1 & disown'
サーバーの再起動をするにはkillするだけでよいが、更新もしたい場合はいちど永久ループを止める必要がある。
それには、bashのプロセスを検索してbashを先にkillする必要がある。
サーバーをgdb経由で自動的にデバッガ起動し、クラッシュしたときに自動的に
バックトレースを保存するなどもできるが、それは後で。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment