スクリプト
次のようなことを試すことができます。
#!/bin/bash
case "$1" in
start)
pushd app/directory
(export FOO=bar; rails s ...; echo $! > pid1)
(export FOO=bar; rails s ...; echo $! > pid2)
(export FOO=bar; rails s ...; echo $! > pid3)
popd
;;
stop)
kill $(cat pid1)
kill $(cat pid2)
kill $(cat pid3)
rm pid1 pid2 pid3
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0
このスクリプトをscript.sh
やなどのファイルに保存しますchmod +x script.sh
。でサーバーを起動./script.sh start
し、. ですべてのサーバーを強制終了できます./script.sh stop
。サーバーを起動する 3 行にすべての詳細を入力する必要があります。
説明
最初はpushd
: これにより、ディレクトリがアプリの場所に変更されます。3 つの起動行のpopd
後、スクリプトが存在する場所に戻ります。を囲む括弧(export blah blah)
はサブシェルを作成するため、 を介して括弧内に設定した環境変数はexport
括弧の外側に存在してはなりません。さらに、3 つのアプリが異なるディレクトリにある場合はcd
、3 つの括弧のそれぞれに を入れて、. の前にあるアプリのディレクトリに移動できrails s
ます。行は次のようになりますexport FOO=bar; cd app1/directory; rails s ...; echo $! > pid1
。コマンドの後のセミコロンを忘れないでくださいcd
! この場合、pushd
とpopd
行を削除することもできます。
Bash では$!
、最後のコマンドのプロセス ID です。それをエコーし、(を使用して) (またはまたは)>
という名前のファイルにリダイレクトします。後で、サーバーを強制終了したい場合は、 を実行します。はコマンドを実行し、出力をインラインで返します。pid ファイルにはプロセス ID のみが含まれているため、 はプロセス ID 番号を返すだけで、それが に渡されます。サーバーを強制終了した後、pid ファイルも削除します。pid1
pid2
pid3
kill $(cat pid1)
$(...)
cat pid1
kill
免責事項
このスクリプトは、エラー チェックと構成に関してもう少し作業が必要になる可能性があり、まだテストしていませんが、動作するはずです。少なくとも、独自のスクリプトを作成するための良い出発点になるはずです。
追加情報
私のお気に入りの bash リソースはAdvanced Bash-Scripting Guideです。実際、bash はいくつかの優れた機能を備えたかなり強力な言語です。bash の仕組みを学ぶことをお勧めします。