Выполнение bash script в gradle

Я выполняю функциональное тестирование с помощью geb.

Мое приложение развертывается с использованием девственности и использует HSQLDB для хранения данных. Я хотел бы выполнить тесты в этой рабочей версии приложения, но я хотел бы начать с пустой базы данных при каждом запуске веб-сайтов.

Я написал простой bash script

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

который удаляет базу данных и перезапускает virgo.

Однако, когда я добавляю его в команду build.gradle, выполнение команды никогда не заканчивается.

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

Почему так? Когда я запускаю эту консоль script, она быстро возвращается (но девственница все еще записывает на консоль).

Я попытался запустить его в отдельном потоке, но я столкнулся с следующей ошибкой:

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.

Я также попытался установить "create-drop" в конфигурации спящего режима, но также требует перезапуска дев. Даже повторное развертывание приложения не помогает.

Что делать, чтобы запускать веб-сайты с пустой базой данных?

Ответ 1

Что странно

Я создал задачу

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

который вызывает cl.sh файл

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

вызывающий acl.sh

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

и это сработало! но одна вещь, однако, когда вы добавляете символ. /acl.sh ampersand &, вы вызываете задачу из другого потока, который начинался с gradle, и, похоже, он висит. Я бы удалил и от ваших вызовов до выключения и начал как это

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

в любом случае вы хотите подождать в том же потоке от остановки до запуска, и не нужно также вызывать сон!