shell脚本无限运行

时间:2014-05-16 06:38:31

标签: shell unix

我有一个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秒内完成执行。那么我该如何解决这个问题呢?请帮忙。

4 个答案:

答案 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)

正如其他提到的答案,你可以

  1. 使用./bin/elasticsearch &运行命令 背景。
  2. 记录的进程ID     命令在后台使用child_pid=$!运行,然后停止     一段时间后使用kill $child_pid来实现一个过程     超时机制。
  3. 同时,您还可以使用wait命令将另一个操作与后台运行的命令同步。以下是一个例子:

    ./bin/elasticsearch &
    # do something asynchronously here
    wait # wait for accomplishment of ./bin/elasticsearch
    # do something synchronously here