2012-05-29 25 views
11

私はgebで機能テストをしています。バックグラウンドでbashスクリプトを実行

私のアプリケーションはvirgoを使ってデプロイされ、HSQLDBを使ってデータを格納します。私はこの作業バージョンのアプリケーションでテストを実行したいと思いますが、Webテストを実行するたびに、空のデータベースから始めたいと思います。

私は、データベースを削除し、乙女座を再起動し、簡単なbashスクリプト

#!/bin/sh 
rm -rf $VIRGO_HOME/aresdb* 
$VIRGO_HOME/bin/shutdown.sh & 
sleep 10 
$VIRGO_HOME/bin/startup.sh & 

を書きました。

しかし、私はそれを私のbuild.gradleタスクに追加すると、コマンドは実行されません。

task cleanDB(type: Exec) { 
    commandLine './clean.sh' 
} 

なぜこのようになりますか?コンソールでこのスクリプトを実行すると、すぐに復帰します(しかし、コンソールにはまだvirgoが書き込まれます)。私は別のスレッドでそれを実行しようとしましたが、私はエラーが以下の遭遇

task cleanDBThread()<<{ 
    def cleanDBThread1 = Thread.start { 
     cleanDB.execute() 
    } 
    sleep 10000 
    println "wake up!" 
} 

Exception in thread "Thread-32" java.lang.IllegalStateException: 
Cannot start long running operation, as the task artifact state cache 
(/home/tomasz/ares/.gradle/1.0-milestone-9/taskArtifacts) has not been locked. 

また、私は「を作成・ドロップ」をHibernate設定で設定しようとしたが、それはまた、乙女座の再起動が必要です。アプリケーションを再デプロイしても役立たない。

空のデータベースでWebテストを実行するにはどうすればよいですか?私はcl.shファイル

acl.sh

#!/bin/sh 
echo "I am not doing anything" 

を呼び出す

#!/bin/sh 
echo "starting " 
./acl.sh & 
sleep 10 
./acl.sh & 

呼び出すタスク

task callCL(type: Exec) { 
    commandLine './cl.sh' 
} 

を作成し、それが働いた

奇妙な

+1

コマンドの最後から&を削除するとどうなりますか?あなたの命令をバックグラウンドで実行する必要はありません。これで修正されますか? – Jared

答えて

11

!ただし、./acl.shのアンパサンド文字を追加すると、&という名前のスレッドから別のスレッドからタスクが呼び出され、ちょっとぶら下がっているように見えます。私はシャットダウンにあなたの呼び出しから&を削除し、同様に開始する。この

#!/bin/sh 
rm -rf $VIRGO_HOME/aresdb* 
$VIRGO_HOME/bin/shutdown.sh 
$VIRGO_HOME/bin/startup.sh 

とにかくあなたが開始するために、シャットダウンから同じスレッドで待機するようにしたい、とあまりにも睡眠をコールする必要はありません!

関連する問題