我有一个shell脚本run.sh
。
cd elasticsearch-1.1.0/
./bin/elasticsearch
cd
cd RBlogs/DataFetcher/
mvn clean install assembly:single;
cd target/
java -jar DataFetcher-0.0.1-SNAPSHOT-jar-with-dependencies.jar
这里如果第二行(./bin/elasticsearch
)执行它会运行无限时间,所以下一行不会执行。所以我需要的是在10秒后执行下一行。但
cd elasticsearch-1.1.0/
./bin/elasticsearch
sleep 10
cd
cd RBlogs/DataFetcher/
mvn clean install assembly:single;
cd target/
java -jar DataFetcher-0.0.1-SNAPSHOT-jar-with-dependencies.jar
这也不会执行下一行,因为./bin/elasticsearch
将无法在10秒内完成执行。那么我该如何解决这个问题呢?请帮忙。
答案 0 :(得分:0)
在&
末尾添加./bin/elasticsearch
将导致进程在子shell中运行,从而为下一个命令释放当前shell。
./bin/elasticsearch &
在第二版脚本中更改此内容,事情应该按照您的需要运行。
可以从man bash
If a command is terminated by the control operator &, the shell
executes the command in the background in a subshell.
The shell does not wait for the command to finish, and the return status is 0.
答案 1 :(得分:0)
您可以尝试将其置于后台
&可以为您
执行此操作
./bin/elasticsearch &
答案 2 :(得分:0)
如果您只是希望elasticsearch
在后台运行而其他脚本进展,请使用&
:
cd elasticsearch-1.1.0/
./bin/elasticsearch &
sleep 10
cd
cd RBlogs/DataFetcher/
但是,如果你想运行elasticsearch
最多10秒,必要时将其删除,然后继续执行其余的脚本,你需要更复杂的东西:
cd elasticsearch-1.1.0/
./bin/elasticsearch &
pid=$!
sleep 10
kill -0 $pid && kill $pid
cd
cd RBlogs/DataFetcher/
答案 3 :(得分:0)
正如其他提到的答案,你可以
./bin/elasticsearch &
运行命令
背景。 child_pid=$!
运行,然后停止
一段时间后使用kill $child_pid
来实现一个过程
超时机制。同时,您还可以使用wait
命令将另一个操作与后台运行的命令同步。以下是一个例子:
./bin/elasticsearch &
# do something asynchronously here
wait # wait for accomplishment of ./bin/elasticsearch
# do something synchronously here