それに対する私の解決策は、god、capistrano、および when を組み合わせて使用することです。私が抱えている特定の問題は、すべてのアプリプロセスをユーザーとして実行したいため、initd スクリプトはオプションではありません (これは実行できますが、ユーザーの切り替え/環境の読み込みが非常に面倒です)。
神
基本的な考え方は、godを使用してプロセスを開始/再起動/監視することです。神は始めるのが難しいかもしれませんが、非常に強力です:
- God を単独で実行すると、すべてのプロセス (Web サーバー、bg ジョブなど) が開始されます。
- クラッシュしたプロセスを検出して再起動できます
- プロセスをグループ化し、それらをバッチで再起動できます (ステージング、プロダクション、バックグラウンド、devops など)
いつでも
サーバーの再起動時に神を開始する必要があります。これを行う良い方法は、ユーザー crontab を使用することです。@reboot
ほとんどの cron 実装には、サーバーの再起動時に特定のコマンドを実行できるという特別な命令があります。
@reboot /bin/bash -l -c 'cd /home/my_app && SERVER=true god -c production/current/config/app.god"
いつでも、再起動コマンドの生成など、crontab の管理を容易にする gem です。私が説明したことを達成するために絶対に必要というわけではありませんが、カピストラーノの統合には非常に役立ちます。
カピストラーノ
サーバーの再起動時にプロセスを開始するだけでなく、デプロイ時にプロセスを再起動することも必要です。バックグラウンド ジョブのコードが最新でない場合、問題が発生します。
Capistranoを使用すると、それを簡単に処理できgod restart production
ます。展開後の capistrano タスクで、グループ全体 (: など) を再起動するよう神に依頼するだけで、シームレスに処理されます。
また、いつでも capistrano 統合により、crontab が常に最新の状態に保たれ、config/schedule.rb
ファイルを変更した場合に更新されます。